Compare commits

...

951 Commits

Author SHA1 Message Date
zzz
2c76b87fba 0.9.31 2017-08-06 21:45:05 +00:00
zzz
bbe3a71d2c bump for review 2017-07-31 21:05:41 +00:00
zzz
9d1097b467 merge of '11dcbebf6657486cbeae1d8bfe43ede3f4a5b314'
and '8e065cf86f719138e323815c38f249ed56941327'
2017-07-31 20:51:17 +00:00
zzz
8beb75be50 refresh deb patch 2017-07-31 20:49:50 +00:00
str4d
80c55c150f Console: fix router family page form (ticket #2022) 2017-07-31 20:43:29 +00:00
str4d
82806099a7 Console theme tweaks:
- Use plugin icon for unidentified sidebar plugins and ensure placement and
  coloring is consistent
- Mobile:
  - Fix misaligned elements in light theme
  - Enhance 'Summary Bar' link
2017-07-31 19:30:07 +00:00
zzz
903f46f3a8 man page translation updates 2017-07-31 19:02:24 +00:00
zzz
d99a699839 translation updates 2017-07-31 18:55:06 +00:00
str4d
9f15ae6e56 Add a0.png to update files 2017-07-30 12:13:03 +00:00
str4d
26bc83c51b Console theme fixes
- light theme:
  - Fix spacing issue with banned peers list 
  - Tweak font sizes for Arabic
- Shrink icons in sidepanel network status span
- Add single graph view buttons to classic theme
- Better separation of graphing controls in single graph view
- Enhance presentation of /oldconsole and /proof
2017-07-30 12:05:04 +00:00
str4d
5dd5a99de5 Theme fixes
Console:
- Enhance presentation of show/hide news links on home page
- Fix some issues with Arabic CSS (light/dark)
- Further tweaks to graphs display and fixes for borderless single graphs
  in midnight/dark themes
- Fix minor coloring issues with light theme post-rework
- Misc theme fixes

I2PSnark:
- Move </center> tag in fileinfo view that prevented sticky navbar from working
- ubergine:
  - Alternative panel tabs for embedded view
  - Tighten .snarkTorrents thead/tfoot spacing
  - Tweak embedded navbar coloring
  - Reduce height of download bars
2017-07-28 18:00:53 +00:00
str4d
ac75327a78 Refactor README.md 2017-07-28 00:45:08 +00:00
str4d
2f48af517e Bump -21-rc 2017-07-27 02:16:06 +00:00
str4d
e284675e5a UI fixes
'light' theme (console & apps):
- Rework to reduce contrast (ticket #1996)
- Add custom radio/checkbox icons for Chrome/Blink

Console:
- Fix reseed failure notice overlap when "check connection" message shown
- Enhance presentation of console "error 500" messages
- Cosmetic tweaks to welcome page presentation, arabic welcome page tidyup
- Migrate .smallhead th class to tr to simplify markup
- Sidebar:
  - Remove "Congestion" from default sidebar (still present in default
    advanced sidebar)
  - Fix label wrapping issue with translations
  - Migrate sidepanel news section to tables to permit better control over
    wrapping and placement (ticket #1996)
  - Move news item dates to tooltips to lessen chance of headlines wrapping
    and cleanup presentation
  - Increase maximum length of local tunnel links in the sidebar (and handle
    overflow with CSS) to minimize chance of default tunnels display
    truncating in translations
  - Add the power off icon to sidebar restart button on hover to clarify
    button function (ticket #1996)
- /configadvanced: Move floodfill status to row above to remove unnecessary
  whitespace and cleanup UI
- /debug: Add debug icon to h2 headers to aid navigation
- /graphs: Improve presentation of graph images by removing rendered border
  and setting background color to better integrate with themes
- /home: Widen div.app to lessen chance of truncation (classic/midnight)
- /jars:
  - Minimize table overflow with conditional scaling of content
  - One-click select for revision, sha256 & unsigned mods
- /logs:
  - Reduce line/entry spacing for router and critical logs (#ticket 1996)
  - Multi-column view for changelog at >=1400px to address horizontal
    whitespace issue
- /netdb:
  - Multi-column display of Leases in LeaseSet tables
  - Better alignment of Lease elements, iconify gateway
  - Placeholder flag for unknown/unresolved peers for [flag+dest] combos to
    improve presentation / fix deadspace issue
- Chinese:
  - Fix alignment of table contents in /tunnels (classic)
  - Fix sidebar content display width (midnight)
  - Cosmetic fixes (all themes)

I2PTunnel:
- Ensure message log font scales proportionately
- Fix overflow issue with dropdowns in Chrome/blink (dark/midnight)

SusiDNS
- Reduce width of filter buttons to lessen chance of wrapping (ticket #1996)
- Add non-selectable items to improve copy/paste of hosts in address books
- Make dest addresses in host list only display scrollbar on focus to reduce
  screen clutter
- Hide broken imagegen images

SusiMail: Enhance presentation of 'postman' links on login panel
2017-07-27 02:14:34 +00:00
str4d
674f523cba Add JavaScript snippet to reset dest address scroll position onblur
Fixes Chrome/Blink disappearing text bugs in i2ptunnel and susidns.
2017-07-27 01:23:06 +00:00
str4d
2bfe27d217 /jars:
- JARs, WARs & individual plugins separated with headers
- Filenames stripped of path info (path indicated on headers and tooltips)
- Add container divs and styling markup
2017-07-27 00:42:46 +00:00
str4d
fe2387e4f0 Missing from previous commit 2017-07-27 00:02:25 +00:00
str4d
30eb089623 /debug:
- Add container divs and styling markup
- Add top navigation menu
2017-07-26 23:14:30 +00:00
str4d
ee1112cca7 SusiMail: Dismiss notifications on click 2017-07-26 23:04:29 +00:00
str4d
a39fb3d7c2 I2PSnark:
- Mitigate truncation of ratings dropdown in comments section (translations)
- light: Reduce contrast of display text
- light/classic: Increase contrast of download bars
- Create Torrent trackers table: Replace "Tracker URL" with "Tracker Type"
  (ticket #1996)
- Add a persistent warning to the messagelog when JavaScript is disabled to
  indicate potential loss of form data upon refresh (ticket #1996)
- Migrate "view or change bandwidth" to [Configure] tooltip to standardize
  configuration links, allow for more space for option labels and lessen
  chance of option labels wrapping in translations
2017-07-26 22:03:08 +00:00
str4d
0feb16d57b history.txt: Tweak my older entries to fit 80 character per line limit
This ensures the routerconsole changelog multi-column view doesn't wrap
unnecessarily.
2017-07-26 20:46:54 +00:00
str4d
b8f5c956e6 Console: Move JRobin default color and font changes into SummaryRenderer
This ensures these changes are applied to Debian installs, where we get JRobin
from the package manager instead of our bundled source.

The padding and grid stroke changes to RrdGraphConstants have not been reverted,
because there is no API provided to alter those values. This will result in a
minor difference between Debian and non-Debian graphs, and if a user shares
those graphs, it will reveal the fact that they have installed the Debian
package. This is acceptable, given that the graphs themselves inherently reveal
significantly more private information than that.
2017-07-25 10:13:36 +00:00
zzz
70393fd2d9 Console: Fixup /imagegen text 2017-07-19 14:43:51 +00:00
zzz
d4a139f215 Console: Fix compile error with Jetty 9.2.22 (ticket #2019) 2017-07-15 13:57:40 +00:00
zzz
0b85bffeff Crypto: Preserve CRT parameters for RSA private keys (ticket #2005) 2017-07-13 15:53:00 +00:00
zzz
5ddb4edd14 fixups after review 2017-07-13 15:46:37 +00:00
str4d
d2da262374 Theme fixes
Console:
- /tunnels: Fix display issue with inbound/outbound glyph display in table
  header (classic/light)
- light: Prevent routerlogs from causing horizontal page overflow 

I2PSnark:
- Reduce size of screenlog font at 1400-1600px viewport width to lessen
  chance of text-wrapping (ticket #1996)
- classic: Fix a linespacing issue in the config section (options:) that only
  triggers in foreign languages that force the options td to wrap
2017-07-11 03:35:49 +00:00
str4d
3c19bb4ec5 Console: Increase displayed changelog lines to show entire release cycle 2017-07-11 03:31:55 +00:00
str4d
123c0de700 Correct some history entries 2017-07-11 03:18:11 +00:00
str4d
19fcb9e5b9 Comments 2017-07-11 03:08:52 +00:00
str4d
281534b0b0 Fix HTML tags across non-default conditional branches 2017-07-11 02:15:17 +00:00
str4d
4fff74793b I2PSnark: Fix I2PSnarkUtil.getCommentsName() to match its JavaDoc 2017-07-11 02:13:32 +00:00
zzz
7d62c43209 bump -18-rc 2017-07-08 19:59:01 +00:00
zzz
00388675f1 new translations 2017-07-08 16:00:51 +00:00
zzz
4ddca951f2 translations update 2017-07-08 15:15:28 +00:00
zzz
2abaa4a39b fix html errors in help files 2017-07-08 13:26:29 +00:00
zzz
402a2af898 GeoIP 2017-07-04, blocklist update 2017-07-08 13:14:17 +00:00
str4d
4e8ed909e3 Bump -17-rc 2017-07-07 21:25:34 +00:00
str4d
5c670fc57f Show advanced sidebar links by default in advanced mode (ticket #1996) 2017-07-07 21:24:23 +00:00
str4d
e83d31f749 /logs: Correctly format unavailable crypto warnings (ticket #1996) 2017-07-07 18:40:10 +00:00
str4d
d8831151fe Console: Fix log file size config bug on /configlogging bug (ticket #1996) 2017-07-07 17:25:25 +00:00
str4d
87d6c302e6 Minor theme tweaks:
- Console:
  - Cosmetic changes to new firewalled network status in sidebar
  - Arabic: ensure the destinations correctly align on /tunnels
- I2PSnark: Ensure .snarkNoneLoaded background color remains constant on
  mouseover in dark theme
2017-07-02 14:17:59 +00:00
str4d
afec920bee Bump -16 2017-07-02 03:56:32 +00:00
str4d
873b0b0f19 SusiDNS: Default to the console theme 2017-07-02 03:42:35 +00:00
str4d
96c73e7fcb i2psnark: ubergine fix for hidpi 2017-07-02 03:29:03 +00:00
str4d
56f6a68ef3 Console: Show correct icon for "Firewalled" network status 2017-07-02 03:25:36 +00:00
str4d
7cd7f01db9 Console light theme: prevent identicon breaking out of its container 2017-07-02 03:07:54 +00:00
str4d
1650cbe8de Bump -15 2017-07-02 01:42:29 +00:00
str4d
dc46f00a35 merge of '95d429bc46db23b3e3181caf4e622b763cff51eb'
and 'ca23007c18cf5894a1b6b4efa92207aa025473d2'
2017-07-02 01:42:05 +00:00
str4d
d2edce845a I2PSnark:
- Standalone:
  - Better target the per-theme resources
  - List all available themes in config section
- Themes: tidyups & further optimizations to reduce lag
2017-07-01 19:55:19 +00:00
str4d
bd84ba2d5c SusiMail: set button widths 2017-07-01 19:47:15 +00:00
str4d
bd74b22b02 Console:
- /netdb:
  - All Routers/Leasesets/Sybil sections:
    - Each transport instance on own line
    - Better presentation of address characteristics
    - Place flag in table header
  - Container div for leasesets to allow 2 column display at wider viewport width
  - Increased spacing of lease information in leaseset tables
  - Add div for "not initialized" message
  - Reorganize content display in sybil database to reduce horizontal whitespace:
    - Conditional 2-column display of sybil families
    - Sybil router characteristics & threatpoints presented in multi-column view
    - Added empty (n/a) fields to maintain visual consistency in column view
- /tunnels: ensure our tunnel tables display correctly in Arabic
2017-07-01 19:44:02 +00:00
zzz
c768b8f8d7 DNS (ticket #1998):
- Data: Cache hostname lookups in RouterAddress
- Job Queue: Make search jobs droppable
- Router: Increase JVM DNS cache time
- Util: Add negative DNS lookup cache, increase cache size
2017-07-01 19:41:16 +00:00
str4d
56c0fbeebe Tag "local" strings on /tunnels (tagged for translation elsewhere pre-freeze) 2017-07-01 18:59:10 +00:00
str4d
5bc9d0af52 I2PSnark: Fix unclosed <label> 2017-07-01 08:08:38 +00:00
str4d
12cbbfbac7 Bump -13 2017-06-19 13:47:55 +00:00
str4d
4aa4ff738a Console:
- Add untagged strings for /tunnels tooltips and local tunnel indicator (to
  be tagged for translation post .31 release)
- classic: reduce color contrast of main display font
- classic/dark/midnight: alignment on /peers and /tunnels
- /tunnels:
  - Add bandwidth tiers definitions
  - Indicator for local tunnels
- /profiles:
  - Split capabilities and version
  - Minimize wrapping at narrow viewport width
  - Iconify view profile link
  - Add "OK" status indication for functional peers
- /peers: merge Dir and CWND rows in definitions table
- /events: when no events found, place result in table
- All themes: marginally increased width of sidebar to better accommodate
  extra long strings
- Chinese: ensure buttons do not deviate in height (ticket #1996)
- Arabic: fix alignment issues on /configui; presentational enhancements
- Misc: remove erroneous tags
2017-06-19 13:46:40 +00:00
str4d
3d535a2282 I2PSnark:
- Disable JavaScript td:onclick (handled by css)
- Fix minimode bug in vanilla/ubergine
- Minimode for dark/classic
- ubergine:
  - Further optimizations to reduce lag/cpu load
  - New hidpi details.png to bypass mix-blend mode in .snarkTorrents
- Usability:
  - Tab navigation now works for toggle panels
  - Touch target for configure button now extends entire length
- All themes: cleanups and optimizations
2017-06-19 13:00:50 +00:00
str4d
36030ae180 i2ptunnel: consistent tooltips and Destinations for editClient and editServer 2017-06-19 12:52:56 +00:00
str4d
e21479a164 Cleanup & formatting tidyups for welcome page readmes, remove unneeded classes 2017-06-19 11:29:29 +00:00
zzz
32efa2e509 DNS (ticket #1998):
- Data: Cache hostname lookups in RouterAddress
- Job Queue: Make search jobs droppable
- Router: Increase JVM DNS cache time
- Util: Add negative DNS lookup cache, increase cache size
2017-06-15 15:48:22 +00:00
str4d
8216b68ee1 bump -11 2017-06-12 13:11:53 +00:00
str4d
3e4318cca6 /netdb: Fix UI bug with unpublished LeaseSets 2017-06-12 13:04:27 +00:00
str4d
cf7a6041b3 UI updates
Console:
- /logs: fixed environment/running info table resize on focus (ticket #1996)
- Scale theme/language divs so we don't truncate language display
- Arabic (light) adjust font size for sidebar elements
- Sidebar network status display (ticket #1996)
- Usability:
  - Enhance presentation of tables on /peers (improve header/column alignment,
    center to separator for multi-value rows)
  - Enhance presentation of tables on /tunnels (reliable alignment of mixed
    content in rows, more prominence to bandwidth tiers)

I2PSnark:
- Usability: add tabindex="0" to screenlog
- Update navbar link classes to allow easier targetting of button type 
- Remove disabled cursor for known tracker radio icons (ticket #1996)
- Fix alignment issue for comments (ticket #1996)
- ubergine: further optimize theme to reduce scroll lag (ticket #1996)
- ubergine/vanilla:
  - Add mini-mode at <=800px
  - Small size reduction to navbar links (ticket #1996)

Imagegen:
- Theme tweaks
2017-06-12 12:45:51 +00:00
zzz
25c709afe2 Reseed updates 2017-06-11 16:30:12 +00:00
zzz
58b38b283f Remove forum.i2p links 2017-06-11 16:26:25 +00:00
zzz
931d7a95bd poupdate source 2017-06-05 23:08:28 +00:00
str4d
d771cc6e37 history 2017-06-05 07:58:41 +00:00
str4d
e21a57a1fc Switch light theme to the same top-nav style as the other themes 2017-06-05 07:58:04 +00:00
str4d
1ede0c8b2f Boost letter spacing and margins slightly 2017-06-05 07:29:53 +00:00
str4d
57f3b89eed Fix alignment of language flags 2017-06-05 07:14:15 +00:00
str4d
9eedb5c732 Add state classes to network status messages in sidebar 2017-06-05 00:42:54 +00:00
str4d
4964b1165f Hardcode language names in their native language for usability 2017-06-04 10:26:01 +00:00
str4d
bd1ccba960 SusiDNS: Update SVG image to use grouped objects for styling and hotlinks 2017-06-04 05:10:26 +00:00
str4d
3334d9f737 Fix regression in snark CSS 2017-06-04 05:04:02 +00:00
str4d
135920a9bb Updated history 2017-06-04 05:02:52 +00:00
str4d
c0742b5cf3 Remove capitalization of SusiDNS config options in light theme 2017-06-04 05:00:22 +00:00
str4d
163023ecc2 String tweaks 2017-06-04 04:59:46 +00:00
str4d
791bc9a84f String de-duplication 2017-06-04 04:59:26 +00:00
str4d
c91f942194 /netdb: Fix bug rendering the "Add to addressbook" link for local Destinations 2017-06-04 01:01:09 +00:00
str4d
66385c06ae Minor theme tweaks:
- Use theme-consistent colours for graphs (dark + midnight)
- Add slight visual feedback when clicking table header and i2psnark control
  buttons
- tr highlighting in i2ptunnel to match other info-dense tables
2017-06-04 00:43:16 +00:00
str4d
6fe55529d6 i2psnark: Fix bug in status tooltips 2017-06-04 00:33:29 +00:00
zzz
4c6af7cdca bump -10 2017-06-03 17:24:06 +00:00
str4d
5e8730a616 Console:
- (light, dark, midnight) Fix minor alignment issues with Arabic CSS
- JRobin (graphs):
  - Fix font size issue for non-title text on graphs
  - Optimise layout (tweaked padding, legend box size etc)
  - Tweak graph lines (now dotted, slightly less opaque)
2017-06-03 14:11:33 +00:00
str4d
6acca28969 i2psnark:
- (ubergine) Speed up tr:hover events by optimizing css (remove latency)
- (all) Remove fade activation delay for download bars, speed up fade-in /
  fade-out
- Fix i2psnark link in navbar overflow issue in Arabic (ubergine/vanilla)
- (ubergine) Change default font for screenlog from Noto Mono to Droid Sans Mono
  to soften text/slightly reduce text size
2017-06-03 14:10:54 +00:00
str4d
017f66a342 i2ptunnel:
- Remove redundant labels and spans for keyaccess
- Edit Server:
  - Shift Local Destination / Private Key file to share table row
    - Reduces spread of Local Destination textarea
  - Move "Use SSL to connect to target" to Target Port column
- Add translation tagging for title tags
- Remove redundant title tags and provide enhanced strings for features that
  benefit from clarification
- Move title tags to <label> where applicable
- Fixed Cancel button on registration so it now jumps back to the list page
- textareas for registration page and local destination on edit server page
  changed to divs
  - Scrollbars hidden until mouseover, 1 click to select content
  - Responsive width, tabindex="0"
    - Fixes text breaking out of textarea bounding box issue in chrome/blink
- Fix overflow issue on select dropdowns (edit server/client -> tunnel options)
  in Chrome / Blink
- More generous vertical padding for th (responsive)
- Larger h2/h3s (responsive)
- Increase spacing between panels in iframe mode
2017-06-03 14:10:08 +00:00
str4d
ff400c9448 UI feedback
Console:
- Increase contrast of table rows on profile/tunnels/peers tables
- Changed pink font to magenta in /logs to increase legibility
- Soften H3 headings in sidebar
- Single click to select I2P Version and Running Environment table text, with
  table:hover color change and text cursor to better reflect selection
  - Modify text above to indicate what exactly needs to be included in logs
- Reduce size of monospace dests in peers/profiles/tunnels, add additional
  spacing (responsive)
- Fix resizing of sidebar reseed button
- De-emphasise siderbar app icons with background-blend-mode: luminosity
- Change sidebar snark icon to match homepage icon
- Bump div.main text color from #222 to #333 (reduce contrast)

i2ptunnel: Increase vertical spacing of H2/H3's

SusiDNS: Change address helper icon to add book icon

i2psnark:
- Remove font-adjust-size (ubergine/vanilla)
  - Was probably causing the navbar links to display too large on some setups
- Add extra spacing to screenlogger bullets (ubergine)
2017-06-03 14:09:17 +00:00
str4d
b28cc94a4a Compress some of the larger image files
Space savings of 40-60%. All tested and passed for perceptual differences
(non-noticeable).
2017-06-03 14:08:17 +00:00
str4d
4da95af45a i2psnark:
- Reorder .snarkCommentInfo sections so my rating / average rating is located
  directly above posted comments/ratings in .snarkComments
  - Allows us to visually join the two tables and provide comment/rating
    continuity

- If author name for comments is configured, display it in .snarkCommentInfo
  table header

- Full status tooltips for status icons in .snarkTorrents
  - This ensures we still retain full info in mini-mode in light/midnight themes
    in addition to providing more descriptive text (for new users)

- Rework td/th classes for .snarkTorrents so each column (both th + td) now
  belongs to a given class
  - Removes the need to overuse nth-child qualifiers to target columns
  - Allows easier column-alignment/spacing/widths

- Stop .snarkTorrentStatus class being incorrectly applied to .peerinfo columns

- Spans for DHT peers / Dest in #totals
  - Ensures they don't break on narrower screens in Russian etc.

- Span for .snarkTorrentInfo info hash
  - So we can highlight and select with a single click

- Delete icon for delete comments td

- Overhaul .snarkTorrents column widths
  - Provides more predictable scaling experience, tidier layout

- CSS tidyups; deduplicate .snarkTorrents classes and move to their own
  commented section
2017-06-03 14:03:56 +00:00
str4d
a9bf1e2969 SusiDNS:
- Rework SVG image
  - Now features interactive feedback when mouseover objects and hotlinks
- Update fallback images for en and fr
- Update overview text
- added tabindex="0" to destination addresses, highlighted on :focus
2017-06-03 14:01:33 +00:00
str4d
d50c12dc7d Console:
- Add spans to /stats page to avoid summary info breaking mid-sentence, and to
  aid presentation
- Adjust /stats CSS so information isn't over-dense
- Set graph size for generated graphs on /stats to 600x200
- Fix netdb leaseset tables
  - Ensure we only iconify add to addressbook links and not b32 dests
- Individual icons for I2PSnark and I2P Plugins on /home
- Add div to upnpstatus on peers to comply with layout
- Fix various unclosed/erroneous tags
2017-06-03 13:59:20 +00:00
zzz
5361571c15 Crypto: Fix AES NPE on 4-core RPi 2nd try (ticket #1989) 2017-05-25 18:05:45 +00:00
zzz
13d9322d81 Debian: Update notes on dependencies 2017-05-24 12:49:55 +00:00
zzz
d35f260f15 Console: Don't show add-to-addressbook link for local unpublished clients 2017-05-24 12:47:24 +00:00
zzz
7338b79ef1 GeoIP: Fix NPE in Maxmind lookup (thx parg!) 2017-05-24 12:40:45 +00:00
str4d
edda87d53e Snark theme updates, hidpi rating images 2017-05-22 11:49:23 +00:00
zzz
de0a5c7094 i2psnark: Fix bencoded scrape response for zzzot (ticket #1994)
requires zzzot 0.16.0
2017-05-21 18:42:42 +00:00
str4d
008f421377 Fix a minor alignment issue on the address helper page 2017-05-21 03:01:59 +00:00
str4d
6821e13820 Add images for theme updates 2017-05-21 03:01:17 +00:00
str4d
fa73b481e6 i2psnark: Integrate ratings and comments into themes 2017-05-21 02:59:50 +00:00
str4d
63581d32de SusiMail light theme tweaks 2017-05-20 08:10:28 +00:00
str4d
0db637ed5a Clarify choices on address helper save page (ticket #1940) 2017-05-20 08:09:30 +00:00
str4d
62b3e19217 Add router.hideFloodfillParticipant to advanced settings help 2017-05-20 07:26:47 +00:00
str4d
2b82312b77 I2PSnark changes:
- Make DHT debug section collapsible
- Tooltips for downloading/finished torrents
- Download bars for torrents, torrent parts and peer downloads
- Friendlier date format (with completed: <date> tooltip for finished torrents)
2017-05-20 07:26:19 +00:00
zzz
81b8b18581 i2psnark: Add ut_comment UI and per-torrent configuration
Some UI cleanup still to do
2017-05-19 21:33:30 +00:00
zzz
769cb40b79 missed checkin 2017-05-19 19:25:18 +00:00
zzz
81026c2871 build fix 2017-05-19 19:23:47 +00:00
zzz
dc33ad101a Console: Move /peers page rendering from router to console (ticket #1879)
except UPnP still to do
compressed size: appx. 25 KB
2017-05-19 19:20:11 +00:00
str4d
b7baeddc7c Bump to -5 2017-05-18 13:52:35 +00:00
str4d
e6b968e48c History for prop 2017-05-18 13:49:56 +00:00
str4d
96bdfb3a63 propagate from branch 'i2p.i2p' (head 247ff5f9bcb20e4aa3ad4aa8702425c315d1d77b)
to branch 'i2p.i2p.str4d.ui' (head d4b5b96ff60f7d8b746c8fc5f0f9c533778a9eda)
2017-05-18 12:54:13 +00:00
str4d
7002c683ab Minor i2psnark style fixes 2017-05-18 12:52:10 +00:00
str4d
ae7c2f6e5f Use disabled drop-down in universal theming mode instead of plain text 2017-05-18 12:51:19 +00:00
zzz
b8c97a1d7a AES: More cleanups and javadocs 2017-05-17 15:54:37 +00:00
zzz
a5551c1be3 Debian: More fixes for lintian 2017-05-17 15:51:34 +00:00
zzz
7d129215cf Debian: Put the i2prouter-nowrapper man page with the binary 2017-05-17 13:31:07 +00:00
zzz
777d2fc0f0 javadoc fix 2017-05-17 13:26:39 +00:00
zzz
7f45e97335 Reseed: Remove expired SSL cert 2017-05-17 12:16:34 +00:00
str4d
feee22e389 Fix escaping of non-breaking space in time string 2017-05-15 04:53:58 +00:00
str4d
208372ed9e Prevent i2psnark DHT debug info breaking out of the table 2017-05-15 04:05:44 +00:00
str4d
6fd66c9396 Cleanups:
- Minor theme updates/fixes
- Added #jumplist div to proxy error to make styling easier
- "tabindex -1"s to ignore disabled radios in snark/tracker config
- Updates to eepsite css files.
2017-05-15 03:18:34 +00:00
str4d
e8c28ad42c Add tooltips to shutdown/restart buttons 2017-05-14 12:28:27 +00:00
str4d
5caefb5ea9 I2PSnark tweaks:
- Replace theme selector with a message when universal theming is enabled
- Move DHT debug info into its own <tr>
2017-05-14 12:26:17 +00:00
zzz
ac788d973f Router: New method to get bandwidth class, for efficiency 2017-05-14 12:16:25 +00:00
zzz
e973185be1 Crypto: Initialize array earlier (ticket #1989) 2017-05-14 11:57:48 +00:00
zzz
040af114e1 i2psnark: Fix HTML double-escape (ticket #1992) 2017-05-14 11:51:08 +00:00
str4d
6f60d642af propagate from branch 'i2p.i2p' (head 098e31ae6c0969990791077264bfd58d8ac3680c)
to branch 'i2p.i2p.str4d.ui' (head 0cfd439957ebce6c3a71f5b3e11f4e873388b03c)
2017-05-14 06:53:02 +00:00
str4d
8a5967f592 Additional <label>s 2017-05-14 06:35:23 +00:00
str4d
a929b5c683 Theme updates:
- Section title images in the tunnel manager + presentational tweaks
  - Separation of server/client tunnels for consistency in iframed/separate view
- More responsive layout tweaks specifically for narrow viewports
  - Lessens UI breakage, particularly for languages with long translated strings
    (ru, de etc)
- Susimail light theme enhancements
- Incremental theme tweaks including Arabic (light/dark) & Chinese
  (classic/dark/midnight)
- Fixed placement of "Welcome to I2P" h2 on /home for new users
- Fixed conflicting .home#home div on homepage (now #homepanel)
- Fixed double select dropdown icon in Internet Explorer/MS Edge
- Addressed minor rendering issues in IE 11 and MS Edge
2017-05-14 06:26:16 +00:00
str4d
e32d4b15e8 String tweaks 2017-05-14 05:41:21 +00:00
str4d
67b3c46758 Shortened button text on /configfamily
Helps to avoid overlong strings breaking layout in translation (specifically
Russian). The section subtitle already indicates full scope of action.
2017-05-14 05:40:45 +00:00
str4d
7de815bd90 CSS sort buttons on /peers
- New icons to avoid conflation of tunnel direction and sort direction
- Active sort columnn now indicated and focused button highlighted
2017-05-14 05:39:51 +00:00
str4d
0aae97162e Use new tabs for a couple of links 2017-05-14 05:38:56 +00:00
str4d
ac31a1319b /news updates:
- Updated presentation of news status & view/hide news text at the bottom of
  the homepage news section, so it behaves sensibly when wrapping (for German,
  Russian etc)
- <span>s for news title dates and author names
- Iconified author name for news entries
2017-05-14 05:38:31 +00:00
str4d
e453ea48e1 /help changes:
- Added topnav
- Added mini-FAQ
  - Linked to subscriptions section from SusiDNS subscriptions page
- Layout fixes for translated pages
- Reformatted help-legal.jsi, removed/replaced dead links
2017-05-14 05:37:35 +00:00
str4d
8f04aa70cb /home changes:
- Update some app icons
- Rationalise the markup
- Add tabindex ="-1" to icon links
  - This means they are skipped when using tab to navigate in the browser
2017-05-14 05:36:40 +00:00
str4d
d7d13d1a4f Whitespace 2017-05-14 05:30:42 +00:00
str4d
6b056ce6e0 Backend HTML changes:
- Labels for radio/checkbox icons to increase surface area for clicks, improving
  UI for touchscreen use
- Standardized configuration labels: bold text for leading options, standard
  weight for trailing descriptions
- Remove some hard-coded table layouts
- Additional ids and classes for theming
2017-05-14 05:30:13 +00:00
zzz
b340f4a17c i2psnark: Better handling of read-only i2psnark dir (ticket #1990)
Prevent add/create/remove/delete
More handling of RuntimeException via Snark.fatal() in SnarkManager
2017-05-12 17:16:25 +00:00
zzz
93cb2a0513 Debian: Fix apparmor profile (ticket #1986) 2017-05-10 16:53:36 +00:00
zzz
610af51e95 show suggested paths 2017-05-10 14:05:02 +00:00
zzz
efd7d651cc AES: Cleanups (ticket #1989) 2017-05-10 14:00:59 +00:00
zzz
d139892ae0 SusiDNS: Fix display of default subscription when no subscriptions.txt file present 2017-05-10 13:49:34 +00:00
zzz
45f3695f9d Debian: Restore systemd for trusty
Fix date in changelogs
doc update
2017-05-10 13:46:04 +00:00
zzz
3e354f2f1a Jetty: New default servlet for eepsite, with
locale-independent directory listing (ticket #1965)
2017-05-05 19:53:43 +00:00
zzz
b0514cc564 move BFNS test 2017-05-05 13:38:59 +00:00
zzz
3718c73341 Reseed: Fix messages about reseed disabled 2017-05-05 12:26:48 +00:00
zzz
cd76457128 i2psnark: Initial support for ut_comment, no UI yet 2017-05-05 12:08:49 +00:00
zzz
f3d931d090 Blockfile: Move from i2p.jar to addressbook.jar
http://zzz.i2p/topics/2274
2017-05-05 11:41:19 +00:00
zzz
ffb3e27c0f launchpad build fixes 2017-05-03 21:29:22 +00:00
zzz
8d6ca6431d fix build.xml XML error 2017-05-03 19:35:59 +00:00
zzz
920b14212f 0.9.30 2017-05-03 13:08:34 +00:00
zzz
1e9c68859e fix null check 2017-05-02 14:34:33 +00:00
str4d
e390e67aee Package I2P servlet classes for Maven Central
RequestWrapper and its dependencies are excluded to avoid classpath issues.
2017-05-02 13:05:31 +00:00
zzz
d27d060322 Jetty: Rollover log files at midnight, not noon
This is a separate Jetty 9.2.21 bug unrelated to the previous fix
2017-04-30 13:19:48 +00:00
zzz
baa314d71f pull translations 2017-04-29 15:20:42 +00:00
zzz
d98c3d8f71 fix another test 2017-04-29 15:01:42 +00:00
zzz
5e497f790d Tests: Temporarily change cert threshold so Vuze's old cert won't fail 2017-04-29 14:40:42 +00:00
zzz
3dbbc2943f Jetty: backport patch from 9.4.4 to 9.2.21
to fix Timer crash in RolloverFileOutputStream
1e46576bf4
https://github.com/eclipse/jetty.project/issues/1469
2017-04-29 14:28:30 +00:00
zzz
925caccb57 Jetty: Set up to add patch for RolloverFileOutputStream
checked in file is unmodified from 9.2.21 for reference
patch in next checkin
2017-04-29 14:24:10 +00:00
zzz
a21e027403 Console: Revert previous checkin, unrelated to the Jetty Timer bug 2017-04-29 13:52:05 +00:00
zzz
4dec3657b0 Console: Disable Jetty timer thread consolidation
causing log file rollover to stop (ticket #1068)
2017-04-27 13:43:24 +00:00
zzz
06f78d7cfe HTTP Proxy: Add delay before jump page 2017-04-26 14:00:50 +00:00
zzz
6901914640 remove reseed 2017-04-26 13:57:49 +00:00
zzz
75db7fa196 geoip 2017-04-06 2017-04-19 13:13:20 +00:00
zzz
f8ea882f99 SSU: Reuse previous introducer expiration if available,
so we don't force a republish
- Don't run peer test if configured to force firewalled
2017-04-14 13:34:33 +00:00
zzz
dd0153e29a SSU: Publish introducer expiration (proposal 133) 2017-04-13 15:58:52 +00:00
zzz
9dd146680d fix eepget man page formatting 2017-04-13 15:52:50 +00:00
zzz
5fa6583a4e Console: Fix detection of UPnP setting changing 2017-04-13 15:45:24 +00:00
str4d
48661361fa Minor theme tweaks 2017-04-09 08:49:09 +00:00
str4d
4747172059 Tweak placement of caps info 2017-04-09 08:48:45 +00:00
str4d
f541dbe042 Add link to /configplugins on /home 2017-04-09 08:28:37 +00:00
str4d
a3e146a814 propagate from branch 'i2p.i2p' (head 5d56a7eb371dddb9336e596bda69f99c91294b05)
to branch 'i2p.i2p.str4d.ui' (head 3aeafcdb5c0ffbc9c77f574558f8438d3e81133e)
2017-04-09 06:52:22 +00:00
str4d
fa6fc84bf8 Theme updates:
- Subtler, softer colors & shadows and cleaner lines in the light theme in the full suite of apps
- Seamless iframe integration for light susidns theme
- Enhanced Arabic support in the light theme
- Better presentation of options on /confignet
- Enhanced bullets for stats/logs presentation
- console_big improvements/fixes
- Incremental improvements
2017-04-09 06:28:47 +00:00
str4d
a0911a43dd I2PSnark: hidpi navbar images 2017-04-09 06:28:20 +00:00
str4d
b6c6a5d696 Whitespace 2017-04-09 06:28:00 +00:00
str4d
5353fd986e Tidy up /profiles, add definitions for capabilities 2017-04-09 06:27:41 +00:00
str4d
3f40af54d1 Add id for for sidebar help & faq h3 2017-04-09 06:27:22 +00:00
str4d
9e8d4fbe21 Reorder sidebar sections for new installs 2017-04-09 06:27:04 +00:00
str4d
cb3326fa42 Minor updates to imagegen page 2017-04-09 06:26:46 +00:00
str4d
123473439c Fix "Advanced" links on sidebar with leading / 2017-04-09 06:26:35 +00:00
str4d
c12312f523 i2psnark: Remove hard-coded topnav image 2017-04-09 06:24:43 +00:00
zzz
dd8f7638c5 add bash completion scripts 2017-04-06 13:05:47 +00:00
zzz
4edc4077f8 Gentoo: Fix config dir location
http://zzz.i2p/topics/2285
2017-04-04 14:07:49 +00:00
zzz
0d3b1fa490 hosts.txt and blocklist update 2017-04-04 14:05:14 +00:00
zzz
828b0954a3 add BuildTime note to checklist 2017-04-04 14:03:09 +00:00
zzz
ec82912085 instructions for adding RPC support to i2psnark-standalone 2017-04-04 14:01:58 +00:00
zzz
021067dab9 deprecate ZipFileComment 2017-04-04 14:01:04 +00:00
zzz
bfc04178a6 i2psnark: Fix standalone configuration for Jetty 9
Context: Fix ClientAppManagerImpl in AppContext,
required for transmission.war in standalone i2psnark
2017-04-02 18:48:03 +00:00
zzz
f390831835 Console: Fix stopping of webapps when console stops (ticket #1893)
i2psnark: Only rewrite torrent config file if changed (ticket #1893)
Util: Don't sync config writes on Android/ARM (ticket #1893)
2017-04-01 14:15:06 +00:00
zzz
5eefb8b222 KeyStoreUtil: Reduce log level of expired cert error 2017-04-01 12:50:31 +00:00
zzz
c06e320f99 SSU: When a IPv6 peer connects, trigger a IPv6 peer test, not a IPv4 one
Require two consecutive peer test results for some state transitions,
to prevent frequent transitions to firewalled and back
2017-03-31 12:28:31 +00:00
zzz
b810b79a44 New translated man pages: pl, pt_BR, ru, sv
updates: it, ko, zh
2017-03-29 14:16:45 +00:00
zzz
3cc0122af4 Throttle: Reduce threshold for probabalistic throttling on slow platforms (ticket #1964) 2017-03-29 12:32:36 +00:00
zzz
48fb12ebeb SSU: Refactor PeerTestEvent out of UDPTransport 2017-03-29 12:30:21 +00:00
zzz
82554b943e Build: Suppress JarScanner warning during Debian build (ticket #1975) 2017-03-27 16:48:25 +00:00
zzz
04e0cfe020 Debian: Add missing addressbook.jar to package (ticket #1973) 2017-03-27 14:52:50 +00:00
zzz
ed590cd6f5 SusiDNS: Add addressbook.jar to classpath, don't fail to start
if it's still not found (ticket #1973)
This fix covers:
1) Old wrapper.config without addressbook in the classpath
2) Java 9 together with 1)
3) Completely missing addressbook.jar
This does not fix addressbook.jar missing from Debian build.
2017-03-27 14:43:20 +00:00
zzz
c1991241e4 Time: Fix crashes on old Androids (ticket #1976) 2017-03-27 14:12:42 +00:00
zzz
b503f03bd6 Blockfile: Include authentication strings in exports 2017-03-27 14:10:01 +00:00
zzz
cff8eafc43 Blockfile: Upgrade to Blockfile format 4 on non-Android ARM 2017-03-25 11:32:05 +00:00
zzz
a0b2f5738a i2ptunnel: Allow alt priv key file to be added without restarting I2P
Display message requiring tunnel restart if tunnel is running
2017-03-25 11:29:14 +00:00
zzz
b335ded1d2 CPUID: Recognize Ryzen 2017-03-24 13:08:56 +00:00
zzz
0a2097a238 Addressbook: Remove static reference, hide implementation
Requires Android fix (ticket #1972)
2017-03-24 13:07:17 +00:00
zzz
1ab67de677 Plugins: Blacklist i2pbote and BwSchedule
Translate exceptions thrown from PluginStarter
2017-03-23 14:55:56 +00:00
zzz
47277063e4 Plugins: Add version number to console messages when downloading/starting,
and linkify plugin name
2017-03-23 13:54:02 +00:00
zzz
ca6ce37a0b context: New ClientAppManagerImpl in AppContext, so registration
works there (for i2psnark-rpc in standalone)
2017-03-21 19:26:48 +00:00
zzz
a00f11d5b7 i2psnark: Add another method to support RPC plugin 2017-03-21 11:57:52 +00:00
zzz
13ad5d72ae SSU: More work on introducer expiration (proposal 133) 2017-03-20 22:31:32 +00:00
zzz
b9a7a76174 dont replace app if a dup 2017-03-20 22:27:55 +00:00
zzz
a8ae2ce955 typo 2017-03-20 22:24:59 +00:00
zzz
de5661ef1b new reseed ssl cert 2017-03-20 22:18:21 +00:00
zzz
e4da3b0f3b dont allow non-GET requests to icon servlet 2017-03-20 22:12:33 +00:00
zzz
95b6bd36e5 i2psnark: Enhancements to support RPC plugin 2017-03-20 16:41:04 +00:00
zzz
05aef9bd59 Move "isSlow" detection to SystemVersion 2017-03-18 14:38:59 +00:00
zzz
fda673038f Addressbook build changes (ticket #1966):
- Build as jar, not war
 - Put empty war in updater
 - Move Servlet starter to SusiDNS
 - Skip war in RouterConsoleRunner
2017-03-18 14:34:59 +00:00
zzz
24801553d6 i2psnark: Recognize XD client 2017-03-15 15:10:23 +00:00
zzz
43c3a14745 javadoc typo 2017-03-14 14:17:10 +00:00
zzz
4b722c9b7f i2ptunnel: New form to enter private key file for alternate destination
- Use alt destination for registration if set
   - Another dup check for alt destination
SusiDNS: New button for adding alternate destination
   - Fix nonces on details page with multiple destinations
   - Fix single dest deletion on details page with multiple destinations
   - Set book in all forms to ensure correct book
Blockfile: Fix specified-destination deletion from the correct book
2017-03-14 14:15:54 +00:00
zzz
1150b4cd73 NBI: Adjust logging during extraction to use standard format 2017-03-14 13:33:39 +00:00
zzz
e7cfb2d6fe Streaming: Add reset() to I2PSocket API
i2ptunnel: Reset I2P socket on TCP socket errors, in standard servers
that don't have protocol responses
SAM: Reset I2P socket on handler errors
2017-03-13 14:09:27 +00:00
zzz
ad810de747 i2ptunnel: Add subsession support to servers, no UI yet
Update subsession javadocs
2017-03-13 13:48:36 +00:00
zzz
b57d7c699f Javadoc: Update Jetty URL and package-list 2017-03-13 13:28:16 +00:00
zzz
ba825e61d5 New reseed, delete unused reseed SSL certs 2017-03-13 13:26:01 +00:00
zzz
aea20a552e Fix HashSessionScavenger, class changed in Jetty 9
History for prop, -4
2017-03-11 16:27:37 +00:00
zzz
0703a29562 propagate from branch 'i2p.i2p.zzz.jetty9' (head 80022f6ef552acd1382d45103969aa7c17b1d794)
to branch 'i2p.i2p' (head 3b4b418ae8be95d52228fc7c325fc52e0223e4fe)
2017-03-11 15:24:23 +00:00
zzz
db0381d6b1 Add required jetty-9.2.21.v20170120 jars
Includes two Tomcat 8.0.33 jars from that, which are:
"A rebundling of Apache Tomcat Jasper to remove the tomcat server dependencies, so that the JSP engine can be used by the Eclipse Jetty project."
2017-03-11 15:24:04 +00:00
zzz
a9be26d2bc unneeded casts 2017-03-11 14:43:37 +00:00
zzz
db5ab0b9b8 Add commons-logging to list of empty jars 2017-03-11 14:37:37 +00:00
zzz
072d990279 reseed now using CA 2017-03-11 14:06:55 +00:00
zzz
6b4f665f34 Add more markers and protection for xml file migration
Add error message for jetty-jmx.xml migration, don't migrate
Update non-default files jetty-rewrite.xml and jetty-jmx.xml
2017-03-10 18:48:48 +00:00
zzz
48a055d462 Streaming: Don't change buffer size when max message size is adjusted
Only change max message size when buffer is empty
2017-03-09 19:40:17 +00:00
zzz
9146f3c7e1 i2psnark: Prevent RuntimeException caused by corrupt i2psnark.dht.dat file
http://forum.i2p/viewtopic.php?t=12751
2017-03-09 19:34:30 +00:00
zzz
1fe9acefe2 Router: Set default sig type to EdDSA for non-Android ARM 2017-03-09 15:25:25 +00:00
zzz
359b4570e4 hide destination box on registration page 2017-03-09 15:24:10 +00:00
zzz
1c720a0fda finals 2017-03-09 15:23:28 +00:00
zzz
d1fdf14911 unnecessary parameter 2017-03-08 16:27:48 +00:00
zzz
6fbeef5f8c remove old ssl cert 2017-03-08 16:26:04 +00:00
zzz
6ef6106336 Random: Don't need extra bits if power of two 2017-03-08 16:25:27 +00:00
zzz
23ee40d990 stray semicolon 2017-03-08 16:24:13 +00:00
zzz
4e236fc5ab Put Jetty 9 files in eepsite-jetty9/ directory in updater 2017-03-08 13:48:28 +00:00
zzz
d573910b7a CPUID: Fix saving of libjcpuid.jnifile on Macs,
was incorrectly saving as libjcpuid.so (tickets #1865, #1900)
 - Try to load libjcpuid-x86_64-osx.jnilib for 32-bit Macs,
   because as of 0.9.26 it's a 'fat binary' with 32-bit in it also.
   This was broken in the 0.9.26 changes.
 - Improve error logging
 - Add library search path logging to main()
NBI:
 - Try to load the "none" architecture for x86, even if
   CPUID loading fails (tickets #1865, #1900)
   This was broken in the 0.9.26 changes.
 - Add library search path logging to main()
 - Comment out unused method
2017-03-06 20:44:16 +00:00
zzz
da00b95599 doc updates 2017-03-06 20:41:43 +00:00
zzz
e20310d257 Throttle: Fix disable of probabalistic throttling (ticket #1963)
Fixes this checkin:
  Revision: c52409bf5d7b422c23a62eecfa50b98d7c74f8df
  Date:     01/16/2012
  Branch:   i2p.i2p
  Don't throttle tunnel creation if using a higher than default router.maxParticipatingTunnels setting.
2017-03-06 20:38:38 +00:00
str4d
74151b06ef propagate from branch 'i2p.i2p' (head 600cd73c4b46b7ba8c421149785f6245afa47487)
to branch 'i2p.i2p.str4d.ui' (head d5b54214bfe1bf5203f614600b916346a10f26dd)
2017-03-06 04:59:59 +00:00
str4d
de7a4ba55c Whitespace cleanups 2017-03-06 04:56:58 +00:00
str4d
5ddeeec9ea I2PSnark theme updates 2017-03-06 04:55:09 +00:00
str4d
1f7042a68e I2PSnark fallbacks when JS is unavailable:
- Use meta-refresh
- Hide JavaScript-dependent buttons
2017-03-06 04:52:42 +00:00
str4d
a65722f3e8 I2PSnark: clean up RNF/RDNE errors 2017-03-06 04:51:55 +00:00
str4d
964dacd907 I2PSnark:
- More tooltips
- Remove "if checked" from checkbox strings
- Checkbox layout tweaks
2017-03-06 04:47:51 +00:00
str4d
25b03979d5 I2PSnark backend layout/style tweaks 2017-03-06 04:43:19 +00:00
str4d
6151480ee6 SusiDNS theme updates 2017-03-06 04:43:02 +00:00
str4d
97fa5d9921 SusiMail theme updates 2017-03-06 04:42:43 +00:00
str4d
83c9dc7437 Console theme updates 2017-03-06 04:41:22 +00:00
str4d
4bf0147198 Update I2P logos for console themes 2017-03-06 03:49:43 +00:00
str4d
d7e5aaf919 Replace &nbsp; with thin non-breaking space &#8239; for byte sizes
The latter has more consistent/predictable width between fonts & point sizes.
2017-03-06 03:46:56 +00:00
str4d
10a021f5fc Re-layout "Banned IPs" section of /configpeer 2017-03-06 03:43:38 +00:00
str4d
20df511401 "Mark for deletion" tooltip in SusiMail folder list 2017-03-06 03:42:56 +00:00
str4d
73708041e8 Spacing tweaks for legibility/consistency 2017-03-06 03:38:30 +00:00
zzz
b71aafbb28 Debian: Add files for jessie with libtomcat8-java
Fix missing glassfish dependency in trusty/control
2017-03-04 15:02:08 +00:00
zzz
319ce9b065 Debian: Revert previous checkin for precise, it does not have libtomcat8-java 2017-03-04 14:44:09 +00:00
zzz
87cff00b99 Debian: Revert previous checkin for trusty, it does not have libtomcat8-java 2017-03-04 14:41:21 +00:00
zzz
f38ee48ca3 Move setting of InstanceManager to WebAppConfiguration to avoid race
Fix up LICENSES.txt
Build.xml cleanup
Debian:
- Add support for with-libtomcat8-java but not with-libjetty9-java for wheezy/jessie
- Fix wheezy/precise/trusty build files to use tomcat8 but not jetty9 packages
- Remove build dependency on ant-optional, not required
- Remove some remaining eclipse-ecj dependencies
- Add short README files for wheezy and jessie
2017-03-04 14:24:48 +00:00
zzz
ec6c24429a Debian build fixes 2017-03-03 19:44:39 +00:00
zzz
15915afeb8 Remove dup DTDs in javax.servlet.jar
Set InstanceManager for webapps
Remove InstanceManager log message
Resolves ticket #1818
2017-03-03 17:56:47 +00:00
zzz
b72085bcf3 Debian builds:
- Remove with-libtomcat6-java and with-libtomcat7-java
- Replace with-libjetty8-java with-libjetty9-java
- Add libtomcat8-java dependency in debian builds
- Change libservlet-3.0-java implicit dependency to libservlet-3.1-java
- Initial mods for trusty build files, as it does not have jetty 9
- Initial xenial build files
- Add link to jetty9-apache-jsp.jar
- Add necessary util jars to jsp classpath
Non-Debian builds:
- Move tomcat runtime from javax.servlet.jar to jasper-runtime.jar,
  to be consistent with Jetty 8
- Switch from jetty (glassfish) to apache (tomcat) jsp implementation,
  to be consistent with Debian builds
- Drop checked-in Tomcat 6 and Jetty 8 jars
Code:
- Force Jasper initialization in RouterConsoleRunner since we
  don't use the Jetty annotation scanner
2017-03-03 15:48:10 +00:00
zzz
5f96067c22 merge of 'bd4c9889786a280f8797cbdc6ca9cddb8c7260a2'
and 'fe4b2b6942b6c0dbe1efda4e2fa555289e74cbef'
2017-03-03 14:00:47 +00:00
zzz
61e4e2a052 Util: Don't depend on DataHelper in FileUtil.copy(),
causes Windows installer to fail because DataHelper is not in install.jar.
tag i2p-0.9.29-win1
2017-03-03 13:59:54 +00:00
zzz
f7cdf221eb UDPAddress: Add method to get introducer expiration (proposal 133) 2017-03-02 14:24:27 +00:00
zzz
69ad95710a UDPAddress: Fix bug in "Error handling for failed intro packets"
cur variable wasn't being incremented.
from Revision: 0f0232b342477486c38b51afa3d298285cc8fbcf
from Date:     09/15/2005
Simplify error handling code
javadocs
2017-03-02 14:14:28 +00:00
zzz
920572d3bc UDPAddress: Make most fields final 2017-03-02 13:27:30 +00:00
zzz
d3abbe86e9 Fix eepsite jetty.xml and jetty-ssl.xml files
Migration script for eepsite jetty.xml and jetty-ssl.xml files
Add exclude protocols
2017-03-01 16:42:57 +00:00
zzz
3631efa567 Fixup for PathMap generics
Remove dup returns
2017-03-01 16:41:19 +00:00
zzz
a6e62afc1f Servlet: Catch OOM in MultiPartRequest 2017-03-01 12:58:16 +00:00
zzz
8bfb3649dd Fix webapps and plugins not starting, because the
default configurations were not being run.
Revert adding JettyJspServlet class, maybe we don't need it after all.
2017-02-28 03:52:32 +00:00
zzz
45abf6575c add missing JettyJspServlet class 2017-02-27 22:26:39 +00:00
zzz
7fb82da7ff Partially revert previous checkin, which was missing some DTDs.
Delete previously checked-in DTDs, and in the build,
copy all the DTDs out of jetty-schemas-3.1.jar to javax.servlet.jar.
Update to Jetty 9.2.21.
2017-02-27 21:31:44 +00:00
zzz
e995a4cf92 i2psnark: Fix disappearing start button 2017-02-27 19:51:38 +00:00
zzz
2de25ca453 addressbook: Add date parameter to authentication strings 2017-02-27 19:50:21 +00:00
zzz
8d928eadba minor fixes after review 2017-02-27 19:49:05 +00:00
zzz
e03c25e397 debian files update 2017-02-27 19:48:28 +00:00
zzz
b695293070 0.9.29 2017-02-27 14:11:44 +00:00
zzz
c09bfa0a26 i2ptunnel: Fix generation of advanced authentication strings 2017-02-27 14:09:46 +00:00
zzz
f420a99b6f Update translations 2017-02-24 23:54:31 +00:00
zzz
33b1851317 PrivateKeyFile: Add option to generate addressbook authentication string
fix inadvertent fallthru
HostTxtParser: Add -q command line option, enhance return codes
2017-02-23 19:45:33 +00:00
zzz
3c735eaf96 more man pages 2017-02-20 18:31:25 +00:00
zzz
3f452c5acb GeoIP, blocklist, checklist update
GeoIP from Maxmind 2017-02-07
2017-02-20 18:20:38 +00:00
zzz
380f55a0e8 I2CP: Return null on decompression failure instead of
throwing exception, to reduce the impact, for example
in iMule which is apparently closing the session (ticket #1915)
2017-02-15 17:48:47 +00:00
zzz
8a89b3da29 Fix calls to Class.newInstance() deprecated in Java 9 2017-02-15 17:01:02 +00:00
zzz
f2ae1bfe09 Utils: Disable caching of ResettableGZIPOutputStreams,
add more checks for compression failure,
fix output for zero-length input (ticket #1915)
2017-02-15 16:45:06 +00:00
zzz
17b781c1b4 Translations: Update source
Fix dependencies for poupdate target
2017-02-15 16:27:43 +00:00
zzz
68fb3f42a8 New SSL cert for reseed.i2p-projekt.de 2017-02-11 20:31:21 +00:00
zzz
fc8c193f37 strip more system properties in I2CP 2017-02-11 15:12:53 +00:00
zzz
c949d776be I2PTunnel CLI: Set connectDelay default for HTTP client
tweak clientoptions help messages
2017-02-11 13:44:57 +00:00
zzz
e29e3e2fd3 Test: Prevent NPE in LocalClientManager test on client shutdown 2017-02-11 13:26:26 +00:00
zzz
e01c443fa2 Test: Add random delay and drop options to LocalClientManager
Return failure codes from LCM to client (ticket #1939)
2017-02-10 19:17:43 +00:00
str4d
50450ecba6 propagate from branch 'i2p.i2p' (head bd037c8b542fe0f6125aa16fb3bff5d257b4e955)
to branch 'i2p.i2p.str4d.ui' (head 9bd4080121d8ef662d6a2e4dfe7fae1079b32646)
2017-02-10 16:43:25 +00:00
str4d
44c0d9357b Update snark tile2.png 2017-02-10 16:42:50 +00:00
str4d
42ba5fa509 Fix typo 2017-02-10 16:42:06 +00:00
str4d
24b2bb8e3f I2PTunnel theme tweaks 2017-02-10 16:41:49 +00:00
str4d
026a9cf026 Smooth out heading backgrounds on I2PTunnel edit pages 2017-02-10 16:40:49 +00:00
str4d
87c8031e5a SusiMail theme tweaks 2017-02-10 16:40:21 +00:00
str4d
bff3f0436c Router console theme tweaks 2017-02-10 16:39:56 +00:00
str4d
bfe8c65628 SusiDNS changes:
- Additional column on hostname list page for helper address with icon, and
  iconfication of b32 addresses
- Added minified identicon to hostname column
- Changed destination address display on list/details from textarea to div to
  accomodate automatic height adjustment (no need to manually specify height and
  hope for the best)
  - Also allows us to display the full Destination on the details page
- Tooltips for eraser icon + new address helper icon & minified identicons
- Consolidation of Hostname/host name/name referenced: now all "Hostname"
- Theme tweaks and whitespace removal
2017-02-10 16:37:15 +00:00
str4d
a22bf6b4a4 I2PSnark changes:
- Add spacing between File Info/ Directory Listing for all themes
- Tooltip for tracker removal eraser icon
- Theme tweaks and whitespace removal
2017-02-10 16:34:33 +00:00
str4d
c4e7b1a799 Open log files in a new tab 2017-02-10 16:31:49 +00:00
str4d
232d0b5e77 More tooltips 2017-02-10 16:31:21 +00:00
str4d
82095d9786 Add "NetDB Search" to Advanced sidebar section 2017-02-10 16:31:08 +00:00
str4d
f68967c5f2 Alphabetical sorting of sidebar links under "I2P Internals" 2017-02-10 16:30:47 +00:00
str4d
9898a4a930 Min width for config tabs on light theme 2017-02-10 12:36:40 +00:00
str4d
092881acc4 Padding for text-dense tables 2017-02-10 12:36:20 +00:00
str4d
b1ed295e26 Rename /configclient button classes 2017-02-10 12:13:05 +00:00
zzz
2d8f0c2956 Streaming: Fix optional delay and choking (tickets #1046, 1939)
- Don't always send optional delay
- Don't overwrite choking delay with non-choking delay
- Don't send optional delay of 0 every 8 packets
- Don't set options both in CDR.buildPacket() and Conn.sendPacket()
- Set or clear optional delay in packet when retransmitting
- Move choking state variables from ConnectionOptions to Connection
- Move updateAcks() call from PacketLocal to PacketQueue
- Fully implement choking and un-choking
- Reduce periods for some stats
- Comment out some debug logging
- Cleanups
- Fix javadoc HTML broken in previous checkin
2017-02-09 17:24:03 +00:00
zzz
f0241d4a1c Util: Change logCloseLoop level to DEBUG 2017-02-08 15:27:25 +00:00
zzz
a11bd7cbe7 I2CP: Return local delivery failure on queue overflow (ticket #1939) 2017-02-08 15:22:41 +00:00
zzz
36ec4de9c7 Console: Consolidate timer threads (ticket #1068)
Clear correct property if no users are set
2017-02-05 20:56:40 +00:00
zzz
843b66d61e Streaming: Don't hard fail on expired message error (ticket #1748) 2017-02-05 19:39:15 +00:00
zzz
afb87cd75c NTCP: Don't write to an inbound connection before established, causing NPE (ticket #996) 2017-02-05 19:09:12 +00:00
zzz
aa098ac800 dont log deletion of deletelist.txt 2017-02-05 14:58:47 +00:00
zzz
bbbbfe2417 reduce concurrent graph generation for ARM 2017-02-05 14:57:57 +00:00
zzz
9ab55ec368 checklist update 2017-02-05 14:56:51 +00:00
zzz
a85546534e Streaming: Don't always send optional delay (ticket #1046)
javadocs
2017-02-05 14:55:13 +00:00
zzz
83c786a5fd more man page translations 2017-02-05 14:16:33 +00:00
zzz
50d735b126 new reseed 2017-02-05 13:03:55 +00:00
zzz
da893452ea HTTP proxies: Pass through relative referer URIs, convert same-origin
absolute referer URIs to relative (ticket #1862)
2017-02-04 21:18:00 +00:00
zzz
6306799a4b single-char indexof() 2017-02-04 19:46:04 +00:00
zzz
82d812c25c NTP: Enable IPv6 support (ticket #1896) 2017-02-04 15:38:49 +00:00
zzz
890ad257e1 Router: Run shutdown tasks in parallel,
increase max time for shutdown tasks (ticket #1893)
i2psnark: Remove most delay between announces at shutdown
2017-01-30 22:05:43 +00:00
zzz
7cb5dab67f i2ptunnel: Add support for outproxy plugin to CONNECT proxy (tickets #1364, #1895)
Add support for ports to CONNECT proxy
2017-01-30 00:33:43 +00:00
zzz
1cf6030646 Utils: Catch Java 9 error in SSLEepGet 2017-01-28 15:41:48 +00:00
zzz
36fd93da0d Utils: Comment out debug logging in SSLEepGet 2017-01-28 14:00:11 +00:00
zzz
5483306d21 Utils: Detect when running as service on Gentoo 2017-01-28 13:57:31 +00:00
zzz
1f228a3f85 Build: Rename translated man pages to be compatible
with dh_installman for debian.
Add i2prouter-nowrapper man page.
Misc. man page fixups (man man-pages for the standard)
No ant targets or deb packaging yet.
2017-01-27 19:15:32 +00:00
zzz
12cc7b3a3b bump -4 2017-01-27 16:11:14 +00:00
zzz
61fd242938 Build: Translated man pages for es and zh,
and a script to build them.
es complete, zh partial, just for testing.
No ant targets or deb packaging yet.
2017-01-27 16:10:00 +00:00
zzz
78da3b9785 javadoc fixes part 15 (ticket #1894) 2017-01-27 16:00:58 +00:00
zzz
e0e06d73eb javadoc fixes part 14 (ticket #1894) 2017-01-27 03:14:34 +00:00
zzz
112fa503e6 javadoc fixes part 13 (ticket #1894) 2017-01-27 03:03:34 +00:00
zzz
9dab3b0dfe javadoc fixes part 12 (ticket #1894) 2017-01-27 02:27:53 +00:00
zzz
82064760d5 javadoc fixes part 11 (ticket #1894) 2017-01-27 02:19:47 +00:00
zzz
bd1354f95b javadoc fixes part 10 (ticket #1894) 2017-01-27 01:49:19 +00:00
zzz
fb74f41692 javadoc fixes part 9 (ticket #1894) 2017-01-27 01:41:06 +00:00
zzz
5db89d8743 javadoc fixes part 8 (ticket #1894) 2017-01-27 01:36:26 +00:00
zzz
b970912cc1 javadoc fixes part 7 (ticket #1894) 2017-01-26 21:55:04 +00:00
zzz
d196047382 javadoc fixes part 6 (ticket #1894) 2017-01-26 21:45:47 +00:00
zzz
eefb36cb99 javadoc fixes part 5 (ticket #1894) 2017-01-26 21:37:23 +00:00
zzz
dc5bfb224d javadoc fixes part 4 (ticket #1894) 2017-01-26 20:59:26 +00:00
zzz
e461e8fb4f javadoc fixes part 3 (ticket #1894) 2017-01-26 20:51:05 +00:00
zzz
8bb114e9c4 javadoc fixes part 2 (ticket #1894) 2017-01-26 20:45:58 +00:00
zzz
f77fc52ca7 javadoc fixes part 1 (ticket #1894) 2017-01-26 20:37:44 +00:00
zzz
1a28a2af23 Use the EL API and compiler from Jetty, not old Tomcat
Bundle the DTDs, as extracted from jetty-schemas-3.1.jar
These were in lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar in Jetty 8
but are not in any lib/jsp/*.jar in Jetty 9.
  GPL v2:
  Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
  Copyright 2004 The Apache Software Foundation
  Copyright (c) 2009-2013 Oracle and/or its affiliates. All rights reserved.
2017-01-26 17:30:33 +00:00
zzz
d9c6360e0a Build: Set up man pages for translation.
No ant targets yet.
2017-01-26 15:47:42 +00:00
zzz
8137661751 i2prouter: Add root check to restart and condrestart commands (ticket #1770) 2017-01-24 14:44:17 +00:00
zzz
c66559ff84 propagate from branch 'i2p.i2p' (head d2e954c054d89a425c9791067ac7998433e95a23)
to branch 'i2p.i2p.zzz.jetty9' (head adcba23cab31b88e430ee09bf45fd1b6789a1719)
2017-01-19 17:19:00 +00:00
zzz
e47c628891 jbigi: Update GMP version (ticket #1840) 2017-01-19 16:18:30 +00:00
zzz
7b0a5bcd5a debian doc update 2017-01-19 13:33:10 +00:00
zzz
6e7dedba81 javadoc clarification 2017-01-19 13:32:15 +00:00
zzz
83e356140d i2ptunnel: Change eepsite sigtype to EdDSA for new installs 2017-01-19 13:31:10 +00:00
zzz
b66c7802e7 Add new reseed reseed.onion.im 2017-01-19 13:28:40 +00:00
zzz
7311cf33b7 Utils: Gzip test code refresh 2017-01-19 13:25:56 +00:00
zzz
60c93f1e1c Client: Don't log error on datagram dissector fail (ticket #1915),
let the client do the logging.
Throw early if data too short
2017-01-17 15:34:38 +00:00
zzz
a36083ab18 Utils: Java 9 yakkety workarounds 2017-01-17 14:08:47 +00:00
str4d
6308038a08 "Cables? Where we're going, we don't need cables." 2017-01-15 14:17:20 +00:00
str4d
e141abb5de susimail and susidns theme tweaks
- Responsive layout
- "background: none" for radio/checkbox icons (Edge/IE fix)
- Address dropdown display issue in MS Edge by making customized dropdown menus inclusive (-webkit-appearance: none);
2017-01-15 14:15:26 +00:00
str4d
94c6496f9d Tooltips for /configclients and reseed button 2017-01-15 14:13:30 +00:00
str4d
d360ba4817 NedDb advanced lookup layout and theme improvements 2017-01-15 14:08:29 +00:00
str4d
cca3f57373 Presentation tweak on /help 2017-01-15 14:06:23 +00:00
str4d
57e51ab8c5 I2PSnark theme tweaks 2017-01-15 14:04:24 +00:00
str4d
93511c0e61 HTML tag validity bugfixes 2017-01-13 17:34:20 +00:00
zzz
7cae467b59 DTG: Don't try to start if headless (ticket #1924) 2017-01-12 15:54:06 +00:00
zzz
2df64cd098 Copy README.txt contents to README.md
so the github page is restored.
2017-01-09 13:54:49 +00:00
str4d
0a0757a69f Add 10px border between torrent info and content on details page
Only on ubergine theme currently; extend to other themes if this works
2017-01-08 17:23:18 +00:00
str4d
14bacc272e propagate from branch 'i2p.i2p' (head 439bb8be3133559026640ebd22fdf93d10ba2cb9)
to branch 'i2p.i2p.str4d.ui' (head 83c1a136effdf092093e9af799a138e86da7ec43)
2017-01-08 01:37:15 +00:00
str4d
2bc5630832 Final CSS updates
- Responsive layout tested on HiDef+ setup, tweaked where necessary
- Extended glyphs that don't appear to be universally available replaced
- /graphs styling
- Various smaller improvements
2017-01-07 18:51:58 +00:00
str4d
ecb9726ba4 Help: more advanced settings 2017-01-07 18:31:10 +00:00
str4d
894186e975 Updates to /graph
- Graph image updates
  - Custom fonts with fallback
  - Left-align legend
  - Thinner restart and graph lines for clarity
  - Separate legend and display period date
  - Text tidyups
- Tweak layout and text of configuration options
- Default width to 400px to avoid info truncation
- 15s and 30s refresh options
2017-01-07 18:28:55 +00:00
str4d
053ebd7079 Disable anti-aliasing and hinting on QR codes to improve quality of display text 2017-01-07 17:52:09 +00:00
str4d
fabc57b57a Second draft of CSS updates
- More responsive layout
- Accessibility tweaks
- Further consolidation of look & feel between console and webapps
2017-01-07 17:47:01 +00:00
str4d
04b9b202e5 Routerconsole CSS hooks 2017-01-07 17:42:07 +00:00
str4d
acec99ff43 Move console links above hidden service links on /home
UX motivation:
- Console links are a small group of likely-useful actions and apps, thus makes
  sense to keep them at closer reach
- Ensures that if more hidden services links are added, the console links
  remain visible
2017-01-07 17:41:32 +00:00
str4d
e81a01d3e8 Typo fix 2017-01-07 17:36:08 +00:00
str4d
7101fb0997 Move /configclients sub-links into header 2017-01-07 17:33:09 +00:00
str4d
6b7ac9fba6 Move susidns export button to top of UI 2017-01-07 17:29:12 +00:00
str4d
0badcf63aa Theme and forms for imagegen app 2017-01-07 17:09:34 +00:00
str4d
bd69499f8f Add more filetypes to eepsite jetty-dir.css 2017-01-07 16:47:32 +00:00
str4d
23f835781c I2PTunnel CSS hooks 2017-01-07 16:24:34 +00:00
str4d
5dd6f2d06b merge of 'a84cabd267418e1cf436c975915ed5b91e39ae86'
and 'aafd3b9469e494f4f106a5c60c2139947c150679'
2017-01-07 15:48:44 +00:00
meeh
7f9a211242 Adding Dockerfile with support files to build a minimal docker image running i2p. 2017-01-07 13:59:26 +00:00
zzz
ca440a50fe i2ptunnel: Fix NPE on proxy.i2p/add when no params 2017-01-07 13:55:36 +00:00
zzz
994b51b5b1 update to Jetty 9.2.20 2017-01-06 13:57:41 +00:00
zzz
fc0ddb0193 eepget: recognize more status codes 2017-01-06 12:24:29 +00:00
zzz
f0e6baad27 add package dependency document 2017-01-05 15:46:33 +00:00
zzz
6ad4cb0928 Data: No longer sort addresses in an RI by SHA256,
it's undocumented, the other router implementations don't do it,
and unnecessary since we store addresses in a List, not a Set,
as of 0.8.14 2012-05
2017-01-04 14:47:52 +00:00
zzz
91163948b5 Router: Replace random tunnel keys when rekeying 2017-01-04 14:29:37 +00:00
zzz
e16cf2ce51 javadoc 2017-01-04 13:31:55 +00:00
zzz
307a03f0ed RouterAppManager: Logging 2017-01-04 13:31:21 +00:00
zzz
b63d44b226 Sybil: Start analysis 3 days before 2017-01-04 13:30:35 +00:00
zzz
57be0df858 Webapps: Remove classpath system log 2017-01-04 13:28:34 +00:00
zzz
6843950bdc DataHelper: Release resources in finally block 2017-01-04 13:25:49 +00:00
zzz
134cbd46e4 Crypto: Enforce correct seed and hash lengths in EdDSAPrivateKeySpec
From github PR #22
747df9f9aa
2017-01-04 13:00:31 +00:00
str4d
91007735a1 Update tests to use ScalaTest 3.0.1 2016-12-29 18:54:23 +00:00
str4d
14ca463499 Add Maven Central upload to release checklist 2016-12-29 12:12:22 +00:00
zzz
a7492269fb RKG command line tool multiple args 2016-12-24 14:24:30 +00:00
zzz
074c630ac6 Utils: Add RKG command line tool 2016-12-24 13:46:51 +00:00
zzz
f902a63144 Console: Add Referrer-Policy header 2016-12-23 12:35:41 +00:00
zzz
ffcd2d4517 Clock: Fix duplicate notification of clock shift listeners 2016-12-22 15:16:51 +00:00
zzz
dd400bb14b Update: Fix JVM crash and i2p.jar corruption when updating from -1 2016-12-22 14:13:39 +00:00
zzz
63a2a6da08 Router: Check blocklist when loading RIs
Ensure blocklist is initialized before netdb
2016-12-22 14:08:44 +00:00
zzz
3846e08e68 Router: More efficiently check blocklist when receiving new RI 2016-12-22 12:46:38 +00:00
zzz
e625e67b5d Console: Limit age of news entries displayed 2016-12-22 12:03:28 +00:00
zzz
0819857b86 add toopie 2016-12-22 11:25:54 +00:00
zzz
fbbfd8acf0 NTP:
- Verify source address and port
 - Add to command line
 - main() test improvements
 - Add KoD support (ticket #1896)
 - Add initial IPv6 support (ticket #1897)
 - Make some methods private
 - Add year 2036 warning
2016-12-21 17:48:47 +00:00
zzz
95fb2df609 Tools: Fix installer compile fail 2016-12-20 14:01:36 +00:00
zzz
c1baee64d3 reseed updates 2016-12-18 15:06:48 +00:00
zzz
ce47d4ea68 Profiles: length check on file names 2016-12-16 18:06:38 +00:00
zzz
14a839ebba synch graceful exit code 2016-12-16 18:01:30 +00:00
zzz
636badcec2 reduce buffer size 2016-12-16 17:59:00 +00:00
zzz
6093f26fb6 minor cleanup 2016-12-16 17:58:16 +00:00
zzz
4615fce28e Update: Register blocklist version with update manager 2016-12-16 17:56:18 +00:00
zzz
328f544de1 minor optimization 2016-12-16 17:50:26 +00:00
zzz
0c76201bd9 propagate from branch 'i2p.i2p.zzz.test2' (head 2447f30ec8d46502041197c3ca0ce85d4da070b0)
to branch 'i2p.i2p' (head 763f037865b6bc798d2db144dc39faa02a09219a)
2016-12-16 17:45:54 +00:00
zzz
0a1cd20585 Debian: Updates
- Fix jetty version in build.xml
- Make javadoc package priority 'extra'
- Beginning of xenial files, Java 8 only, untested
- Build doc updates
- Add zesty, remove wily in docs
2016-12-15 13:56:52 +00:00
zzz
26a9e8bd89 0.9.28 2016-12-12 16:08:35 +00:00
zzz
f5e8220c8b add java version to manifest 2016-12-12 15:59:10 +00:00
zzz
b7c7e02518 remove reseed serving old files 2016-12-12 15:58:33 +00:00
zzz
7eadc3df6f restore two sites up again 2016-12-12 15:57:58 +00:00
zzz
2f3f01c5c7 remove git.repo.i2p 2016-12-09 20:13:36 +00:00
zzz
5d7546598e remove zerobin 2016-12-09 16:01:23 +00:00
zzz
434e3badd6 translation updates 2016-12-09 15:58:22 +00:00
zzz
541e9e6dc0 Remove DOS line endings in cert (fails ant testscripts) 2016-12-09 15:52:37 +00:00
zzz
8a3a725730 GeoIP: Update from Maxmind 2016-12-06 2016-12-06 19:10:25 +00:00
zzz
74cd5cee20 Router: Revert default family sig type back to ECDSA,
as the OIDs are changing, to be deferred to next release.
Update blocklist
2016-12-05 13:41:51 +00:00
zzz
b78b3cb942 configpeer: Remove hr at bottom 2016-12-04 15:49:53 +00:00
zzz
62b5b49b02 Console: Sort banlist and floodfills in true binary order, not by base64 string 2016-12-04 15:25:38 +00:00
zzz
7734d3dd65 Consolidate base64 alphabet string 2016-12-04 14:10:07 +00:00
zzz
27724a809f BOB:
- Change NamedDB implementation to HashMap
  - Change NamedDB locks to ReentrantReadWriteLock
  - All unlocks in finally blocks, remove redundant unlocking
  - Remove throw declaration from methods that don't
  - Read under write lock when that's simpler
  - Use Boolean fields rather than valueOf()
  - Fix unlock order inversion in I2PtoTCP and MUXlisten
  - Remove unused locking in TCPtoI2P
  - Add missing locking in status command
  - Remove redundant locking
  - Remove unnecessary catch-and-rethrows
  - Spelling fix in error message
  - Set some methods static
  - Blank line removal
2016-12-03 23:10:53 +00:00
zzz
1d6fc40d59 BOB finals 2016-12-03 16:24:00 +00:00
zzz
176ecaa9f1 use new copy 2016-12-03 16:18:56 +00:00
zzz
42efed578a Clean up single char indexOf() 2016-12-03 16:00:09 +00:00
zzz
f461d4881d javadoc fixes 2016-12-03 14:27:50 +00:00
zzz
5be077e25d Clean up single char indexOf() 2016-12-02 18:52:37 +00:00
zzz
5b31540fe8 Console: Version the css links 2016-12-02 17:23:02 +00:00
zzz
ec94a6eca3 NetDb: Peer selection tweaks 2016-12-01 14:33:26 +00:00
zzz
04321e6af3 remove jump server 2016-12-01 14:29:02 +00:00
zzz
25fd488db0 Blocklist: Read feed file before user-specified file 2016-11-27 15:58:57 +00:00
zzz
850f1504f7 NetDb: Add MTU, SSU caps, IPv6 prefix, and cost lookups 2016-11-27 15:46:07 +00:00
zzz
2318a2b319 NetDb: Add same-port check in peer selector
Convert FloodfillPeerSelector MaskedIPSet to use the one now in util
2016-11-27 14:58:34 +00:00
zzz
8d494ad162 Lookup by port and sig type 2016-11-26 17:43:18 +00:00
zzz
5a87c232ea NetDb: Add advanced lookup form
Fix /16 and /8 lookup
Fix tab highlighted for all lookups
Add sybil points for banlist
2016-11-26 15:11:06 +00:00
zzz
f6778c573a SU3File: Add types for blocklist (proposal #130) 2016-11-25 14:53:42 +00:00
zzz
ffb3a75813 add converttohash to commandline 2016-11-25 14:06:23 +00:00
zzz
e3435dce10 sybil tweaks 2016-11-25 13:54:17 +00:00
zzz
497d08845c add links 2016-11-24 18:12:18 +00:00
zzz
cc6cd9e402 Sybil tool enhancements 2016-11-24 18:04:40 +00:00
zzz
64f5fed05a blocklist feed tweaks 2016-11-24 13:54:54 +00:00
zzz
1d280156a2 Console: Lookup RI by IP with netmask 2016-11-23 18:08:15 +00:00
zzz
08f7e5d6a8 ip links 2016-11-23 17:08:13 +00:00
zzz
b72b768945 Console: Lookup RI by IP 2016-11-23 16:13:07 +00:00
zzz
89733251d4 Console: Lookup RI by caps
stub out lookup by IP
2016-11-23 16:00:36 +00:00
zzz
8146f6fdb6 FFPeerSelector: Penalize new and slow peers 2016-11-23 14:21:57 +00:00
zzz
625e992c91 News: Add command line support 2016-11-23 14:06:33 +00:00
zzz
62064da081 News: Support blocklist in the news feed (proposal 129) 2016-11-23 13:54:05 +00:00
zzz
86c0fe327b NetDB: Fix detection of bandwidth class when multiple values are specified 2016-11-21 21:03:37 +00:00
zzz
bbb921806e NetDB: When doing lookups, don't use floodfills too close 2016-11-20 22:25:00 +00:00
zzz
fdff5ecd43 Router: Change default family sig type to EdDSA 2016-11-20 16:32:38 +00:00
zzz
97af7d0622 margins on /configlogging 2016-11-20 15:43:16 +00:00
str4d
11579b9818 merge of '8bf9850eb3fe4fcfb63053838a188969b7ba9c5b'
and 'a40ea9b5f7545281195f00a80e31ae879197e76b'
2016-11-20 06:08:40 +00:00
str4d
01cfb7b241 merge of '348832602d6528cc162d427742d0910df3db76ef'
and 'd51aa134c2f1b0fe533f79663f1e79dade41bde1'
2016-11-20 06:07:00 +00:00
zzz
b0bba18f33 Build: Add manifest attributes for java version to all jars and wars 2016-11-17 15:14:50 +00:00
zzz
70902bd279 Tomcat 6.0.48 2016-11-17 14:56:52 +00:00
zzz
cd4d5a39bf Console: Add netdb lookup by family 2016-11-17 14:33:33 +00:00
zzz
7a1a1d5b93 NetDB: When verifying store, don't use floodfills too close
to the store
2016-11-17 14:27:55 +00:00
zzz
66c2664b91 Blocklist: Add support for IPv6 in blocklist.txt
fixup main() test, minor cleanups
2016-11-17 13:45:36 +00:00
zzz
68e5fd6d08 Profiles: Pull same-IP detection into a utility class, for use by netdb 2016-11-16 18:05:40 +00:00
zzz
37d3204e43 Router: Add methods to verify and track members of our family;
use on sybil page
2016-11-16 18:01:24 +00:00
zzz
784566a7cb eddsa findbugs 2016-11-16 15:27:28 +00:00
zzz
126850626c socks findbugs 2016-11-16 15:26:19 +00:00
zzz
42cbc1e9ac Console: Remove dead home page links 2016-11-16 12:34:24 +00:00
zzz
1a46d9373d Certs: Add Let's Encrypt ISRG Root X1 cert 2016-11-15 20:17:32 +00:00
zzz
cd5d5ee23d Logs: Fix output of dup message after 30 minutes 2016-11-14 13:15:36 +00:00
zzz
16a551f7ce UPnP: Prevent NPE on socket creation fail (ticket #1681) 2016-11-13 16:30:51 +00:00
zzz
75d599e061 Handle case where it was an emptyList 2016-11-13 16:11:19 +00:00
zzz
efd953f3d4 Console: Add initial news to bottom of news page so it doesn't disappear (ticket #1153) 2016-11-13 15:56:47 +00:00
zzz
3ac8e5f54f UPnP: Prevent exception on bad HTTP header (ticket #1480) 2016-11-13 15:11:59 +00:00
zzz
0108c1c290 i2psnark: Periodically DHT nodes (ticket #1328) 2016-11-13 13:48:38 +00:00
zzz
a8976d25e3 Profiles: Delete old ones after saving (ticket #1328) 2016-11-12 23:10:55 +00:00
zzz
6a72c2957b Profiles: Periodically save (ticket #1328) 2016-11-12 22:27:34 +00:00
zzz
f69c0998ea Susimail: Fix nonce error on login after logout
Fix internal error after cancel button on settings form when not logged in
2016-11-12 20:10:58 +00:00
zzz
35548ff9be Susimail: Add logout button to more pages (ticket #1374) 2016-11-12 19:43:00 +00:00
zzz
6ed329db78 I2CP: Reduce log level of error when session closed
while signing leaseset (ticket #1606)
2016-11-12 18:07:20 +00:00
zzz
2c65173bec Console: Add IPv6 firewalled setting on /confignet 2016-11-12 15:14:43 +00:00
zzz
6acc23af00 Console: Fix inadvertent config save when clicking restart or shutdown
on /configstats
2016-11-12 14:54:56 +00:00
zzz
d7a84c88cd JRobin: Move DeallocationHelper logging from wrapper log to router log
Fix redundant cast
2016-11-12 12:29:30 +00:00
zzz
aeeee0e5c4 Build: Truncate history.txt in installers 2016-11-11 18:23:58 +00:00
zzz
c3181d8561 Transport: Use NTCP for some outbound connections even before
SSU minimums are met (ticket #1835)
2016-11-10 15:09:39 +00:00
zzz
24ecc858f1 Tunnels: Reduce default VTBM records from 5 to 4 2016-11-09 21:32:19 +00:00
zzz
e5bcfe4207 Transport: Add stats for inbound v4/v6 connections (ticket #1854) 2016-11-09 21:08:21 +00:00
zzz
e614b0996d Router: Fix low-memory log messages for non-wrapper (ticket #1795)
Install: Add max memory option to runplain.sh
Build: Fix minimum Java version for Windows
2016-11-08 15:42:22 +00:00
zzz
b559b412aa Crypto: Change serial number in selfsigned certs from int to long
Add CertUtil to command line
2016-11-08 14:09:56 +00:00
zzz
cd775fa38d Transport: Improve IPv6 selection logic
to skip temporary addresses on linux
2016-11-08 03:24:30 +00:00
zzz
ab064fd31e add upnp to command line 2016-11-08 00:15:37 +00:00
zzz
08062aaf64 service cant be android 2016-11-07 14:31:53 +00:00
str4d
e74479317d Add router.jar to Maven Central target 2016-11-07 03:11:32 +00:00
zzz
c9c29520b4 Consistently log authentication failures for all interfaces 2016-11-06 17:20:35 +00:00
zzz
81bbf554e8 sort 2016-11-06 15:31:43 +00:00
zzz
26a24a98ed add java 9 log warning 2016-11-06 15:31:01 +00:00
zzz
e8de1daf65 Util: Consolidate linux service detection code 2016-11-06 00:49:34 +00:00
zzz
11e86110e7 Build: Add support for using libtomcat8-java package, untested 2016-11-05 18:50:22 +00:00
zzz
f42d76b4b4 Console: Add message to ignore InstanceManager warning (ticket #1818) 2016-11-05 17:52:21 +00:00
zzz
e379ca6c54 SusiDNS: Fix jsp EL syntax error with EL 3.0 (Tomcat 8) (ticket #1870) 2016-11-05 15:31:07 +00:00
zzz
5d0b35d53a Console: Improve handling and logging of webapps that fail to start 2016-11-04 17:02:15 +00:00
zzz
8c71b883bb Transports: New config options i2np.udp.minpeers and i2np.udp.minv6peers,
for testing (ticket #1876)
2016-11-04 14:20:56 +00:00
zzz
843351956e build fix 2016-11-04 14:02:06 +00:00
zzz
7197d22f2a Transports: New config option i2np.allowLocal,
replaces i2np.udp.allowLocal and i2np.ntcp.allowLocal,
fixes test networks (ticket #1875)
2016-11-04 13:44:24 +00:00
zzz
b77c4c67a1 i2psnark: Add launch-i2psnark.bat (ticket #1871)
author is MXPLRS|Kirill, adapted from launch-i2psnark,
same license
2016-11-04 13:19:02 +00:00
zzz
62bc616ada Crypto: Certificate tweaks for email subjects 2016-11-01 13:27:12 +00:00
zzz
9e8251fb9f spelling take 2 2016-10-30 17:56:41 +00:00
zzz
6ff9483e07 Console: Java 9 fixes for classloader (ticket #1870)
May not be sufficient for plugins
Unlinkify viewmtn links on /jars, site is down
2016-10-29 16:21:02 +00:00
zzz
484a3903ca Build: Fix typo in jcpuid build.sh for Mac (ticket #1865)
Doc updates for Mac copied from that ticket
2016-10-28 17:10:22 +00:00
zzz
916fc96654 opus mime type 2016-10-28 16:15:16 +00:00
zzz
75345f4da1 Utils: Add Addresses methods for getting multiple results from DNS
ticket #1050, work in progress
2016-10-28 16:14:44 +00:00
zzz
e603437500 drop empty wily dir 2016-10-28 16:01:12 +00:00
zzz
d49a778b68 javadoc typo 2016-10-28 16:00:25 +00:00
zzz
95ae86d962 Jrobin: Fix for error in DeallocationHelper on Java version 9-internal 2016-10-28 15:18:08 +00:00
zzz
51e35eb572 Utils: Handle Java version detection for internal or ea versions 2016-10-28 15:08:13 +00:00
zzz
4f0cae59c2 Crypto: Remove deprecated Sha256Standalone as scheduled
This will break Syndie 1.105 and earlier, users must upgrade to 1.107
2016-10-28 01:52:07 +00:00
zzz
886dbf1172 Crypto: Generate more-conforming selfsigned certs (ticket #1853) 2016-10-28 01:39:01 +00:00
zzz
04392069a6 JRobin: Fix for Java 9 to remove dependency on Sun private classes
https://github.com/OpenNMS/jrobin/issues/3
http://stackoverflow.com/questions/1854398/how-to-garbage-collect-a-direct-buffer-java
Code from http://sourceforge.net/p/tuer/code/HEAD/tree/pre_beta/src/main/java/engine/misc/DeallocationHelper.java
unmodified, GPLv2
2016-10-26 19:31:40 +00:00
zzz
78acf707dc JRobin: 1.6.0-1, 2014-10-28, checked in as source
from https://github.com/OpenNMS/jrobin/releases
Replaces 1.5.9.1 from 2008-09-05
Needed for Java 9 to remove dependency on Sun private classes.
No modifications, but includes only core, data, and graph;
cmd, convertor, inspector, and tests are not included.
Using source instead of jar because:
 - Release jar not available
 - Additional change will be needed for Java 9
   to remove dependency on Sun private classes, see:
   https://github.com/OpenNMS/jrobin/issues/3
2016-10-26 17:45:34 +00:00
zzz
08d1ea89bf Build: Set Java 7 build target for all jars;
embedders (esp. Android) targetting 1.6 must
set javac.version=1.6 in override.properties and set
both bootclasspath variables.
2016-10-26 16:56:13 +00:00
zzz
2b6fd49a53 Update GettextResource.java from GNU gettext 0.19.8
Only change is in comment block.
Previous checkin didn't have gettext version, so do this
just so we know what version we are on.
2016-10-26 14:54:59 +00:00
zzz
3063e37cbd Systray: Remove old 32-bit Windows implementation, replaced by DTG 2016-10-25 23:59:20 +00:00
zzz
d2569fa446 i2psnark: Don't count unchoked but uninterested peers as uploaders
when calculating global uploader limit, to allow more upload slots,
especially when some torrents are stalled.
Convert some shared fields to atomics for concurrency.
2016-10-25 22:30:55 +00:00
zzz
8a8452290c Zxing 3.3.0 2016-10-25 15:04:55 +00:00
zzz
d2f7b65282 SSU: Increase max IPv6 MTU (proposal #127) 2016-10-25 13:39:33 +00:00
zzz
80966d60c1 Crypto: Create keystore directory when making SSL keys (ticket #1866)
When we switched to new way of making keys in 0.9.25,
we omitted the mkdir step, which broke it.
2016-10-23 16:38:26 +00:00
zzz
85223303f2 Jetty 8.1.21.v20160908 2016-10-22 16:22:08 +00:00
zzz
0860bd3736 one more gl translation 2016-10-22 15:24:51 +00:00
zzz
b53bf7844b New Chinese (Taiwan) translations for susidns, susimail, debian 2016-10-22 14:19:17 +00:00
zzz
75514ddd87 New Korean translation 2016-10-22 13:51:25 +00:00
zzz
35642e2661 New initial news translations: Czech, Galician, Greek 2016-10-22 13:20:20 +00:00
zzz
c24ddf5deb Build: Fix jbigi build for Arch Linux and others when using Java 8 (ticket #1863) 2016-10-22 12:58:50 +00:00
zzz
f436fd08ed Add MTU to command line utils 2016-10-21 22:23:48 +00:00
zzz
dc523b78d4 CSS fix for more flags 2016-10-21 22:05:54 +00:00
zzz
06a599b4e7 Add Galician language
Flag converted from:
https://en.wikipedia.org/wiki/File:Flag_of_Galicia.svg
Public Domain
2016-10-21 22:00:51 +00:00
zzz
27cd1a6a6e Console: Remove calls to deprecated two-arg setStatus() 2016-10-21 21:38:55 +00:00
zzz
b6521ed884 Wrapper: Update to wrapper 3.5.30
All binaries from Tanuki delta pack,
except for armhf (armv6), compiled on Raspberry Pi:
  ant 1.8.2
  javac 1.6.0_38
  gcc 4.6.3-14+rpi1
Windows binaries remain unchanged as we must recompile them ourselves
(32 bit just to change the icon; 64 bit is not provided by Tanuki)
2016-10-21 21:01:36 +00:00
zzz
71f7c712cd NetDB: Disallow RSA for RI or LS 2016-10-21 18:21:12 +00:00
zzz
f5f411b62f Data: Cache serialized leasesets on floodfills 2016-10-21 18:08:31 +00:00
zzz
d367149048 Tomcat 6.0.47 2016-10-21 17:42:50 +00:00
zzz
1bd5ebd8ec Crypto: Actually use a random nonzero byte in ElGamal,
as our specification says
2016-10-21 17:19:44 +00:00
zzz
534609e83a unused import 2016-10-21 17:13:58 +00:00
zzz
082a5d3c0f move siphash test from util to crypto 2016-10-21 15:21:24 +00:00
zzz
cee3ebbb23 less wtf 2016-10-21 15:20:35 +00:00
zzz
9b27251473 SSU: Fix minimum version check for IPv6 peer test (ticket #1861) 2016-10-20 18:31:32 +00:00
zzz
022479aff9 Build: Don't include jbigi.jar in next release update 2016-10-20 18:23:31 +00:00
zzz
adcee462e3 Build: Add library jars to i2p.jar classpath for Debian builds 2016-10-20 18:20:24 +00:00
zzz
7d070e6caf i2psnark: Add ids to rows, add to per-torrent show peers link 2016-10-20 18:04:56 +00:00
zzz
dcdf3e197c CSS h1 letter spacing tweak 2016-10-20 17:27:24 +00:00
zzz
6b5b3617d4 Debian: Update package descriptions, allow Java 9 2016-10-20 17:23:42 +00:00
zzz
be9f7dbf6e Fix HTML error on /configservice 2016-10-20 17:15:51 +00:00
zzz
38c9cb98a9 Updates for Debian builds 2016-10-18 14:50:06 +00:00
zzz
d8d0414ec4 Updates for launchpad builds 2016-10-17 22:16:35 +00:00
zzz
a7870bbd5a Fix so installers get the right jbigi 2016-10-17 00:49:57 +00:00
zzz
19370a36a2 0.9.27 2016-10-16 23:14:05 +00:00
zzz
5998587c52 Fix test for IPv6 firewalled configuration, javadocs 2016-10-16 16:57:33 +00:00
zzz
778ce71ea4 Translations: Update from Transifex 2016-10-14 12:07:26 +00:00
zzz
72105e218d SSU: Set min version for IPv6 peer testing 2016-10-11 13:24:56 +00:00
zzz
1af23a4106 Debian: Don't use glassfish-javaee.jar for jstl.jar (ticket #1793) 2016-10-10 12:31:28 +00:00
zzz
6b7d22c211 GeoIP update from Maxmind 2016-10-04
Add geoip to checklist
2016-10-06 14:58:46 +00:00
zzz
40b41b0dc5 Add geoipv6 file generation to command line util 2016-10-06 14:55:44 +00:00
zzz
db8a3d5b90 Susimail: Add console translate method so strings don't get tagged in susimail bundle 2016-10-06 14:04:02 +00:00
zzz
011d08b172 poupdate source 2016-10-06 14:02:23 +00:00
zzz
124c2b5ce3 i2psnark: Add standalone shutdown method 2016-10-02 15:44:49 +00:00
zzz
1e375c6de9 Crypto: EdDSA add private key spec constructor for hash
javadocs
2016-10-02 15:42:07 +00:00
zzz
cc4f63be12 SusiMail:
- Show settings button on list page even if no messages
 - Add nonce to forms
2016-10-02 15:39:37 +00:00
zzz
597231bed9 i2ptunnel registration page layout fixes 2016-10-02 14:47:22 +00:00
zzz
98e3ca47e6 Utils: Move SipHashInline from util to crypto 2016-09-24 16:00:56 +00:00
zzz
a46a0b1b32 i2ptunnel: Don't accept default 'mysite.i2p' as a valid spoof host 2016-09-24 15:46:57 +00:00
zzz
d4f786c902 i2ptunnel: Don't wrap destination in status message box
for easier readability / copypaste
2016-09-24 15:30:35 +00:00
zzz
b123720fa3 DTG: Enable by default on Windows 2016-09-24 14:54:30 +00:00
zzz
1376237e08 Reseed: remove user.mx24.eu as requested 2016-09-24 14:13:41 +00:00
zzz
78b7385281 i2ptunnel: Whitelist IRC AWAY inbound 2016-09-22 17:15:33 +00:00
zzz
4ab727acbd SSU: addRateData() cleanup 2016-09-22 17:13:42 +00:00
zzz
32e1c9617e EdDSA: throw IllegalStateException instead of NPE if field not set 2016-09-22 17:10:50 +00:00
zzz
fb323cef69 SipHashInline: Make public for external use with a supplied key (for obfs4) 2016-09-22 17:06:53 +00:00
zzz
cc179b488d DataHelper: Fix read() for nonzero offset, broken since the
beginning (2004) but unused by this repo;
Throw EOFException on short read rather than returning a smaller value,
since the whole point is to guarantee a complete read
2016-09-22 17:01:32 +00:00
zzz
2fd0ed1e74 spelling 2016-09-10 16:26:29 +00:00
zzz
afa5a193a7 Console: Add jsps to view entire router.log and wrapper.log files
Add links to /logs
Add some headers to the history.txt jsp
javadocs
2016-08-21 20:21:50 +00:00
zzz
b0789d45f3 HostTxtParser: Comment out tests, beginning of a command-line tool 2016-08-19 17:20:46 +00:00
zzz
be5fdea5e1 Enable tunnel testing when in hidden mode (ticket #1192)
Enable tunnel testing when without addresses (ticket #1835)
Use fast peers for inbound tunnels when without addresses (ticket #1835)
2016-08-19 17:13:12 +00:00
zzz
268953e19f CPUID: Add IDs for Kaby Lake (unverified/untested) 2016-08-19 16:09:21 +00:00
zzz
8cc03c265f JettyStart: Fix (now unused) main() 2016-08-19 16:06:04 +00:00
zzz
47a0df769e Router: Fix return code in getShutdownTimeRemaining()
when no participating tunnels remain
2016-08-19 16:02:17 +00:00
zzz
ff2d5badc9 ReadConfigJob minor optimization 2016-08-19 15:56:31 +00:00
zzz
bcaf837da8 i2ptunnel:
Register actual listen host with port mapper
Register POP and SMTP ports with port mapper
2016-08-14 17:44:08 +00:00
zzz
0d46c06843 Add new 'atomike' reseed 2016-08-14 15:20:33 +00:00
zzz
cdab6f8b76 i2ptunnel: Add outproxy plugin support to SOCKS (ticket #1824)
Make some classes package private
Move some fields to SocksServer superclass
2016-08-12 16:41:42 +00:00
zzz
b21b953ef2 i2ptunnel: Use preferred sigtype for new SOCKS tunnels 2016-08-12 16:34:44 +00:00
zzz
0d5cf46625 Console: Fix UPnP NPE on /peers (ticket #1830) 2016-08-09 17:27:54 +00:00
str4d
f7db737c1f Update i2psnark filetype icons 2016-08-08 08:00:01 +00:00
str4d
6512a9eb11 propagate from branch 'i2p.i2p' (head c62904685f0153a5b8cd032e8b3f1c4f64c5bec9)
to branch 'i2p.i2p.str4d.ui' (head 2a82ccb644906256af7bd0827725dc83e4c76be2)
2016-08-08 02:29:14 +00:00
zzz
9c0ae14609 Streaming: Fix debug NPE (ticket #1821) 2016-08-02 14:56:03 +00:00
zzz
5fcafb6434 i2psnark: Fix SIOOBE on bad announce URL (ticket #1823) 2016-08-02 14:28:34 +00:00
zzz
5763d73dda SSU: Fix peer test stuck when IPv6-only (ticket #1819) 2016-08-02 14:24:48 +00:00
zzz
cd4218e523 javadoc 2016-08-01 13:40:11 +00:00
zzz
f592f2234b build: include jbigi in next release update 2016-07-30 22:10:12 +00:00
zzz
c73a4a7983 i2psnark: Don't warn on failure to delete file if it's already gone 2016-07-30 18:47:03 +00:00
str4d
3e96a24fb8 Update default eepsite, add new section about running alternative webservers 2016-07-24 12:37:07 +00:00
str4d
01902de200 Hide JS links on proxy pages when JS disabled 2016-07-24 11:45:07 +00:00
str4d
e8e42a0b9d First draft of theme updates
- CSS changes to match backend changes
- Routerconsole themes applied across all plugins
- Move i2ptunnel CSS to a single file
- Image cleanups
- New icons
- Drop unused images
2016-07-24 11:25:32 +00:00
str4d
5368da2632 propagate from branch 'i2p.i2p' (head 57f8904e34e39111f13c427cb9fc92eeeb71afcd)
to branch 'i2p.i2p.str4d.ui' (head c4a8676261c7bbfa420927d931398c52f38ed03f)
2016-07-24 09:21:14 +00:00
zzz
a1fd8f49d7 SSU: Increase minimum peers if we have a IPv6 address
Check for 'B' cap for peer test
Fix peer test ip length check logic
2016-07-20 14:45:29 +00:00
zzz
a213799dac bump -6 2016-07-18 16:00:02 +00:00
zzz
b925f517d2 i2ptunnel: Block 'Proxy' header 2016-07-18 15:23:52 +00:00
zzz
767476ea51 SU3File: Also look in config dir for signer certificate 2016-07-18 14:39:35 +00:00
zzz
37ebf04bb5 Streaming: Kill accept() when session disconnects 2016-07-16 16:59:07 +00:00
zzz
7f2bd164db Plugins: Add exception for HSQLDB Timer in thread check 2016-07-16 16:08:34 +00:00
zzz
77014843fb I2CP Client: Break out of wait for LS in connect() if disconnect message received first 2016-07-16 16:07:14 +00:00
str4d
ddf332e779 susidns: rework top nav, consolidate filter section, misc markup 2016-07-11 07:08:55 +00:00
str4d
e01fe689d0 Encase susimail message nav in div 2016-07-11 07:08:13 +00:00
str4d
c586970128 Migrate i2ptunnel UI to tables, drop duplicate ids 2016-07-11 06:54:26 +00:00
str4d
f1d56a488a propagate from branch 'i2p.i2p' (head 67b5bc86a038a01b09ce3118cb12ffc5a63a7465)
to branch 'i2p.i2p.str4d.ui' (head e6ed70b649e8c498444b47918e2396a9602b8fd2)
2016-07-11 06:52:57 +00:00
str4d
5f62bf3e62 Missing i2ptunnel dependency in IDEA 2016-07-11 06:52:50 +00:00
str4d
3471950f6f propagate from branch 'i2p.i2p' (head e820709c391eb47dd85c43b4ec76d3731e2d653f)
to branch 'i2p.i2p.str4d.ui' (head d58f7672f47913b858ab8651f9f460ac4a911898)
2016-07-10 14:41:03 +00:00
str4d
0333fb6e22 Add a couple of missing dependencies to IDEA 2016-07-10 14:40:54 +00:00
str4d
e34eaa351e propagate from branch 'i2p.i2p' (head 34802d93f1d32368153a6769608d8e1046d0d117)
to branch 'i2p.i2p.str4d.ui' (head cc830bf1431a74c1944324a7b90349cc9319bd92)
2016-07-10 00:24:52 +00:00
str4d
03de374b07 Project files for IntelliJ IDEA 2016-07-10 00:24:40 +00:00
str4d
6d4f8fd471 Fixes after merge
Also found several duplicate ids that were split up; these will be replaced with
classes later.
2016-07-09 23:53:51 +00:00
str4d
b38f3b56f8 propagate from branch 'i2p.i2p' (head 2c491226853de4521d10d68da3a0a8e4db33293d)
to branch 'i2p.i2p.str4d.ui' (head bbdfdd2b3941cfa3c2c5cab8f3c78069c865c54d)
2016-07-09 23:20:31 +00:00
zzz
3baa08a3bb Utils: Improve random seed initialization
Fallback to Random rather than try SecureRandom twice
Fetch from SecureRandom incrementally
Remove log warning
correction, this is just a simple javadoc fix, original changelog was a dup
2016-07-09 21:07:31 +00:00
zzz
896af2c5d2 Utils: Improve random seed initialization
Fallback to Random rather than try SecureRandom twice
Fetch from SecureRandom incrementally
Remove log warning
2016-06-25 22:20:27 +00:00
zzz
2c3311b471 SSU: Add support for IPv6 SSU Peer Testing
(ticket #1752; proposal #126)
In PeerTestManager, this is simply the removal of v6 restrictions,
and the tracking of whether we are testing v4 or v6.
In UDPTransport, track v4 and v6 peer tests separately.
2016-06-25 21:25:12 +00:00
zzz
2506f6b143 spacing 2016-06-25 18:28:02 +00:00
zzz
c9b4ab5a13 Prep for IPv6 SSU Peer Testing 2016-06-22 17:28:55 +00:00
zzz
08fad38782 minor speedup 2016-06-22 17:26:25 +00:00
zzz
ba8b2df473 SSU peer test:
Only fire a peer test on connection if address has changed
Reverts inadvertent change in ccb0029690e8a5921f34289dfc86fe37ef9344c6 2009?
2016-06-22 15:20:33 +00:00
zzz
b819c0334a SSU peer test:
Forget the test and don't keep retransmitting to Charlie if we receive
the Bob reply after the 2nd Charlie reply.
2016-06-22 14:20:19 +00:00
zzz
009f6cce6e add links from old config page to new pages 2016-06-22 13:02:47 +00:00
zzz
4ee66c8218 Back out previous checkin adding override fields to Translate;
we can set language and country with System properties in app context.
Back out previous checkin bundling countries translations in
i2psnark standalone; use Locale to translate country names.
2016-06-18 17:49:28 +00:00
zzz
e6f111c5fc Split up /configclients, add /configi2cp, /configplugins, /configwebappsx
(ticket #1804)
2016-06-16 15:24:24 +00:00
zzz
e146480401 More manifest attributes in streaming jars 2016-06-15 18:34:44 +00:00
zzz
e7f82c88f1 i2psnark standalone:
- hide router link
- change javascript down message
2016-06-15 15:29:09 +00:00
zzz
9ba8f53ec7 Translate: Add method to set language in standalone app context
i2psnark:
- add form to set language in standalone context
- add Ukrainian and Japanese translations
2016-06-15 15:03:17 +00:00
str4d
47f0bbb93a merge of '65027e70ec9585f6013d97ec88d4f251869e47fd'
and 'c26f9208a0245c8b4b421076479271214ff1d660'
2016-06-13 06:03:03 +00:00
str4d
9a9144321d Add build target for Maven Central
Requires the Maven Ant Tasks to be installed. On Debian:

sudo apt-get install libmaven-ant-tasks-java
2016-06-13 06:02:48 +00:00
zzz
2113946ed0 add snark standalone context and redirect files
fix snark standalone build
2016-06-11 17:03:10 +00:00
zzz
cad7953ef6 remove dup section 2016-06-11 16:54:06 +00:00
zzz
1fea327eff more jar manifest attributes 2016-06-11 16:39:27 +00:00
zzz
16a5295140 history for prop, -1 2016-06-11 14:19:04 +00:00
zzz
d84b0e4455 propagate from branch 'i2p.i2p.zzz.test2' (head ee7dbea07e8ad7e01cb8012a1540aca8346ee7d2)
to branch 'i2p.i2p' (head 2cb447c64ae706c6cead619c9428083fce6f1d46)
2016-06-11 13:47:12 +00:00
zzz
bb8e050434 i2psnark standalone:
- Add shutdown hook to delete temp dir
- Fix up CSS URL paths to use single quotes
- Don't attempt to register with update manager
2016-06-11 13:34:09 +00:00
zzz
e27af374b0 i2psnark standalone:
- Cherry-pick fixes from psi's github i2psnark_rpc branch
- Fix up Jetty XML file for Jetty 8
- Start with JettyStart
- Add UrlLauncher to launch browser
- Move RunStandalone to standalone/ directory
- Fix up paths in CSS files during build
- Force startup delay to 0 when in router context
- Fix theme selection when not in router context
- Adjust CSS and image paths when not in router context
- Add hosts.txt so announces work
2016-06-10 19:10:59 +00:00
zzz
471ff5b939 Fix distclean for deb builds
Deb build doc updates
Checklist updates
Deb 8 changelog
2016-06-08 16:41:01 +00:00
zzz
bfbd159706 Release tarball build fixes
Precise build tweaks
Precise and Trusty changelogs
2016-06-07 19:15:00 +00:00
zzz
aa8fd85d65 Fix eepget Deb classpath via patch 0001
Launchpad doc tweaks
2016-06-07 16:55:05 +00:00
zzz
bc6583fe57 merge of '0bf1803f4554f830aee970415fcd6c9b6c4d2747'
and '98a4dbd3af97e8892dafc24a4ebbcc6b2ff30afe'
2016-06-06 21:55:04 +00:00
zzz
249e6f0eea 0.9.26 2016-06-06 19:23:17 +00:00
zzz
7471d04526 Fix i2pwiki.i2p link (ticket #1803) 2016-06-06 12:55:56 +00:00
zzz
389eba23cb Drop empty file inadvertently checked in two years ago 2016-06-06 12:54:38 +00:00
zzz
63272d3cfc mbuild-all script fixes 2016-06-06 12:37:06 +00:00
str4d
78d0a54e96 Typo 2016-06-06 12:34:17 +00:00
zzz
280ca2cf2f CPUID: Add CLI output for new AMD tests
Add @since for new AMD methods
2016-06-06 12:12:16 +00:00
str4d
f564d4dc22 Fixes for a bunch of old unused code to make it compile 2016-06-05 12:57:32 +00:00
zzz
126a4d8443 jbigi: Fix GMP version reporting for shared library (ticket #1800) 2016-06-04 13:23:05 +00:00
zzz
38b930cd03 propagate from branch 'i2p.i2p' (head eb2151f9d804ec432bfe97214896ee62da08943e)
to branch 'i2p.i2p.zzz.test2' (head 2ea50c5f22fe1e24d37dff2f283b77feaa9190ee)
2016-06-04 13:00:36 +00:00
zzz
2eb89e938a i2ptunnel CLI: Don't set the listen host to the I2CP host 2016-06-04 12:50:24 +00:00
zzz
34c611d340 New translations all over 2016-06-03 15:04:04 +00:00
zzz
d4ea7dc416 Update translations
Fix i2psnark .pt_BR file name
Add i2ptunnel .zh_TW
Fix getopt .fi which is coming in from tx non-UTF-8
2016-06-03 14:05:30 +00:00
zzz
1583f35fe4 i2psnark: Add psi's open tracker 2016-06-03 12:42:38 +00:00
zzz
d7e1f62db4 Build: Fix Debian build on ARM (ticket #1801)
- Fix other jbigi/jcpuid build script errors and typos
- Nonzero exit code missing on some jbigi/jcpuid build script failures
- Refresh patch
2016-06-01 17:45:27 +00:00
str4d
e86092b3e0 Consistent back-linking 2016-05-30 04:56:20 +00:00
str4d
ed3120956c Position routerconsole.advanced warning so it is more clearly associated 2016-05-30 04:56:08 +00:00
zzz
dbd1ae0dfb toString() for timer debugging 2016-05-29 15:03:51 +00:00
zzz
6f0fde092b more keys to cache 2016-05-29 15:03:04 +00:00
zzz
7213be43b2 'volatile' family cert
run by 'weekend'
2016-05-29 14:58:19 +00:00
zzz
d0594ebc77 javadoc 2016-05-29 14:56:46 +00:00
zzz
faebe8ab7e Console: Fix /configfamily form (ticket #1797) 2016-05-29 14:35:39 +00:00
str4d
5cb285b034 Bump 2016-05-29 12:09:34 +00:00
str4d
e16760d4d0 propagate from branch 'i2p.i2p' (head 31a9e968da3ecdf8475137e498ed0145bfd48c5a)
to branch 'i2p.i2p.str4d.ui' (head b1b8350768db1eccf4b5939a5add1c5c94410ec3)
2016-05-29 11:53:02 +00:00
str4d
3266907346 Dynamically load javax.naming classes to avoid VerifyErrors on some Androids 2016-05-29 11:47:59 +00:00
str4d
5439ff2195 Update history 2016-05-29 05:06:10 +00:00
str4d
7249b643ac Differentiate between constructor invocation failure and connection failure 2016-05-29 05:03:32 +00:00
str4d
efcf294670 Require that AndroidLogWriter is a subclass of LogWriter 2016-05-29 05:02:47 +00:00
str4d
147a7e4468 propagate from branch 'i2p.i2p' (head fc46f2d84625265a3899b5ad50af5e91d396ba01)
to branch 'i2p.i2p.str4d.ui' (head f8d5c7b37f4813b669d8a10f9ff82d0ed2a33282)
2016-05-29 02:04:34 +00:00
str4d
e969213451 Dynamically load Android LogWriter 2016-05-28 23:39:13 +00:00
str4d
03e188b57a Rename LogWriter -> FileLogWriter, LogWriterBase -> LogWriter 2016-05-28 22:51:44 +00:00
zzz
8807787b10 remove alert character output from build script printfs 2016-05-26 20:24:08 +00:00
zzz
f653b03288 Ubuntu: Launchpad precise build fixes
- Mods to the trusty debian files for precise
- New precise-tarball build target
2016-05-26 18:29:24 +00:00
zzz
498280b56d Ubuntu: Launchpad build fixes
- Set BITS in rules to target architecture bits
- Remove dh --with quilt as dh clean will unpatch with quilt
2016-05-26 14:22:18 +00:00
zzz
6b8cb54466 Debian: Refresh patch, update docs 2016-05-26 11:42:24 +00:00
zzz
0e941625cf Streaming: Return I2PSocketAddress from StandardSocket methods (ticket #1321) 2016-05-25 14:55:30 +00:00
zzz
2a739f593f Reseed: Require two sources minimum (ticket #1794) 2016-05-25 13:53:21 +00:00
zzz
d48f70c2fe poupdate english po files 2016-05-25 12:43:33 +00:00
zzz
f4d4ca0adf remove i2psnark message 2016-05-24 15:07:48 +00:00
zzz
bb8b3ebe8c add reseeds requiring SNI 2016-05-24 15:06:55 +00:00
zzz
e518e670f2 DTG: Add tray icons for Windows and Mac
White icon copied from Android drawable-mdpi/ic_stat_router_active.png for Windows
Converted to black in Gimp for Mac
2016-05-23 18:26:41 +00:00
str4d
6b7db094a9 Add toggles to i2psnark in preparation for CSS3 collapsible sections 2016-05-23 13:25:18 +00:00
str4d
9d3dec8577 Another style tweak 2016-05-23 13:20:22 +00:00
str4d
797ee21024 First pass at tidying up the favourites and services
This will change again once the new IA and UX for /home has been defined.
2016-05-23 12:50:07 +00:00
str4d
e485752546 Add help section for advanced settings 2016-05-23 12:46:18 +00:00
str4d
c9728fe2ef Add an optional Advanced section to the summary bar 2016-05-23 12:27:42 +00:00
str4d
206718f1e8 Text tweaks 2016-05-23 11:37:49 +00:00
str4d
31b480a68e Tweak /configstats toggle layout, hide if JS disabled 2016-05-23 11:33:42 +00:00
str4d
1a335321b2 Limit file inputs to accepted extensions 2016-05-23 11:29:10 +00:00
str4d
96fc02de5c Layout tweaks 2016-05-23 11:26:44 +00:00
str4d
804011d18d Note about language name length 2016-05-23 11:19:44 +00:00
str4d
f95100a1ff Update links, add tooltips etc. 2016-05-23 11:02:10 +00:00
str4d
bbc2454f36 Remove \n from inside empty <ol>s
When there are no list items, the <ol>s are now rendered as <ol></ol>, which
means they can be selected in CSS with ol:empty (to e.g. display: none), because
:empty only ignores comments inside HTML tags. This will be unnecessary once
browsers support the :blank selector, which will build on :empty to also ignore
whitespace.
2016-05-23 06:21:24 +00:00
str4d
62437acf66 More ids and classes 2016-05-23 05:41:24 +00:00
str4d
9cbcf5baa7 Fix repeated ids that should be classes 2016-05-23 05:31:42 +00:00
str4d
63260aac59 propagate from branch 'i2p.i2p' (head 198dad192e830f3eaf568af10f308bc98795470e)
to branch 'i2p.i2p.str4d.ui' (head 24039fce2eef425a63521138774a182aa07fec9f)
2016-05-23 04:55:57 +00:00
str4d
c5432a2098 Dynamically load domain socket code 2016-05-22 01:18:16 +00:00
zzz
3afe04d5e9 change tracker URL as requested 2016-05-20 21:31:20 +00:00
zzz
101d0691f0 DTG: Fix systray menu redraw on Mac;
Switch to AWT by default on Mac;
Hide DTG enable form on Mac until we fix headless override in i2prouter
2016-05-20 14:43:15 +00:00
zzz
18b61e7036 Config files, eepsite help: Add path information for OS X
and Windows as a service. (ticket #1495)
2016-05-19 19:03:53 +00:00
zzz
86a35f1a13 SSU: If configured with a hostname, bind to all v4/v6
addresses found for that hostname.
Fix binding if more than one IP or host was configured.
Log tweaks
2016-05-12 21:37:07 +00:00
zzz
d6638f3e00 NTP:
Don't put random data in zeroed fields
Increase random data in originate timestamp from 1 byte to 2 bytes
Verify originate timestamp to prevent injection
Verify received packet size
Log tweaks, javadocs, cleanups
2016-05-12 13:48:44 +00:00
zzz
f9bd4952f4 release checklist more info on translations 2016-05-09 15:18:01 +00:00
zzz
edbeac9c7b DTG: Add 9 new translations 2016-05-09 15:09:08 +00:00
zzz
97fca96861 DTG: Can't do first-time startup from /configservice,
restart required
2016-05-09 14:26:07 +00:00
zzz
702e1c5a78 Console: Fix escaping of search URLs on /confighome 2016-05-09 13:26:18 +00:00
zzz
ea38672159 Console: Fix HTML error on /configui 2016-05-09 13:09:38 +00:00
zzz
2d08889977 DTG swing event handling tweaks 2016-05-09 12:45:29 +00:00
str4d
b316315c61 Use subtable for mail header 2016-05-09 12:01:23 +00:00
zzz
ab3dbd5880 I2PSnark: Limit cases when we display tracker errors;
include host name of tracker when we do
2016-05-09 11:32:56 +00:00
str4d
61be475044 propagate from branch 'i2p.i2p' (head 6706bab853107973d7d0ff28212aae65bd098591)
to branch 'i2p.i2p.str4d.ui' (head 645f60a4d23af4116ae660b09dfff32d19a65c32)
2016-05-08 21:47:30 +00:00
str4d
29befb44cc Missing files from revision f253b24b4a6d5c841605792653ed57344dade6c4 2016-05-08 21:31:08 +00:00
zzz
6b578dfd8c Console: Fix UTF-8 passwords
Partial fix for UTF-8 usernames
Better input checking and help messages
2016-05-08 19:49:14 +00:00
zzz
8bb6922e80 Reseed: Reformat reseed list as requested by 'backup'
Remove unused certificates
2016-05-08 13:40:56 +00:00
zzz
99a5b10ea6 DTG: Add basic network status
Hide disabled items in Swing menu
2016-05-07 17:39:02 +00:00
zzz
bf1fa061e3 DTG: Use actual console URL
Hide browse menu item if not supported
2016-05-07 15:16:38 +00:00
zzz
16cee2ad56 Build: Update javadoc links to Java 7
Refresh package-lists
2016-05-07 13:49:03 +00:00
zzz
bb468ad38f javadoc fix for deb builds 2016-05-07 13:25:23 +00:00
zzz
05012a91ed refresh deb patches 2016-05-07 13:07:25 +00:00
zzz
5d93ca19f8 Build: Add back the old, slow way to build bundles
for gettext < 0.19
2016-05-07 12:57:49 +00:00
zzz
7d11ec2f08 merge of '52c56a56e3e6addc350299c0f86142760a6fc7cb'
and 'a8e6813e94cbc0bdccb063d140214db36af7ac1f'
2016-05-07 12:51:50 +00:00
dev
0f6336052a core/buildscripts: Added ARM support to BITS detection.
Added support for armv6/armv7/aarch32/aarch64 BITS detection
to build scripts.
2016-05-07 01:34:38 +00:00
zzz
62296222e9 Console:
- Show systray controls for all OSes on /configservice
  - Implement backend for systray control
2016-05-06 17:54:27 +00:00
zzz
70f9cb1b19 Build:
- Add DTG to updater
  - Fix and bundle DTG license info
  - Remove jstl.jar and standard.jar from updater,
    last changed in 0.9
  - Fix bundling of Tomcat license info
Console:
  - Change to new DTG constructor
  - Don't attempt to start systray or DTG when running as a service
2016-05-06 15:56:54 +00:00
zzz
ecafcddddb merge of '1ec1784c6eed4da97d0f3236f9fb46dea17d158b'
and '602d5ca1a488f10859327e19709700a7e1837c7c'
2016-05-06 15:43:38 +00:00
zzz
dd50b1487b DTG: Implement second TrayManager menu implementation in Swing.
Use Swing for non-Windows menus because AWT looks terrible on Linux
and the button handling there is almost impossible to fix
TODO: test on Mac
2016-05-06 13:45:30 +00:00
dev
c2f35c0d29 core/buildscripts: Added proper uname based BITS detection.
Added automatic detection for the BITS variable.
2016-05-05 22:32:20 +00:00
dev
4fd0261efa jcpuid/build_jbigi: Default BITS to 64 if unset.
To make sure that our debian build scripts work,
set BITS to 64 if unassigned.
2016-05-05 22:03:27 +00:00
zzz
390b2d409c DTG: Hide restart menu items if no wrapper
Add graceful restart and shutdown menu items
Add basic adjustment of menu based on shutdown state
Disable wrapper notification for now
2016-05-05 20:36:02 +00:00
zzz
196cf48372 DTG: Remove Swing DesktopguiConfigurationFrame as it's
completely inconsistent with the AWT SystemTray menus;
move to the AWT menu as a submenu.
This was the last of the Swing UI elements,
mathias ripped out the all of them in Nov. 2010, but
then added this one in Feb. 2011.
Remove LookAndFeel setting, only works for Swing.
2016-05-05 16:39:41 +00:00
zzz
8c1f7a4a39 DTG: Fix NPE and disable logging in config frame 2016-05-05 15:51:02 +00:00
zzz
75d6df7789 DesktopGui:
- Remove all static log, context, and instance fields
- Make Main class a RouterApp
- Remove unused ConfigurationManager class
- Translate tooltip, disable tooltip on linux
- Use safer exec call to start i2p
- Remove all images, use itoopie
- Don't start spinner thread in router context
- Handle various startup errors better
- Synchs, finals, javadocs, cleanups
2016-05-05 13:13:44 +00:00
zzz
16ff3e3def Debian: Refresh patch after i2prouter change 2016-05-05 11:41:05 +00:00
zzz
0839b46c8d i2prouter: Set JAVA_HOME correctly on Mac OS X 10.5 and later (ticket #1783) 2016-05-04 16:05:30 +00:00
zzz
cdafab2734 Wrapper: Update to wrapper 3.5.29
All binaries from Tanuki delta pack,
except for armhf, compiled on Raspberry Pi:
  ant 1.8.2
  javac 1.6.0_38
  gcc 4.6.3-14+rpi1
Windows binaries remain unchanged as we must recompile them ourselves
(32 bit just to change the icon; 64 bit is not provided by Tanuki)
Old 3.5.25 wrapper.jar moved to win-all, use it in windows-only installer
so it will be consistent with the old binaries.
Fixes wrapper failure on FreeBSD 10 (ticket #1118)
Minor i2prouter script fixes for FreeBSD 10, from anonimal (ticket #1118)
2016-05-04 13:40:50 +00:00
zzz
13685484f6 Utils: Fix bug in periodic timers triggered by
a backwards clock shift, caused graphs to be blank
and various router, streaming, and i2ptunnel
degradations over time (ticket #1776)
Log tweaks
2016-05-04 11:43:47 +00:00
zzz
cb2790bc62 another deb fix 2016-05-02 12:17:02 +00:00
zzz
17542400b9 Debian: Back out libhttpclient-java dependency,
requires 4.4 which is too recent for most distros
2016-05-01 21:22:38 +00:00
zzz
7a49b09b97 Build: Fix to not clean in imagegen on every build
Clarify some release prompts
2016-05-01 20:32:14 +00:00
zzz
33629d0744 Build: Compile resource bundles from ant, not msgfmt,
speeding up builds with translations by 20x
2016-05-01 20:19:56 +00:00
str4d
6bfd39d5c0 propagate from branch 'i2p.i2p' (head 8e9786b74b0ffb821179c5c60954ab3c00a71250)
to branch 'i2p.i2p.str4d.ui' (head 94e11eaba6bb17c14f4d9ca58547867f34949847)
2016-05-01 11:45:22 +00:00
str4d
8e391444b4 Fix mail table layout 2016-05-01 05:26:50 +00:00
str4d
a945cabf11 Ensure users know they are logging into I2PMail 2016-05-01 05:21:00 +00:00
str4d
4634debe21 Adjust truncation limits 2016-05-01 05:19:19 +00:00
str4d
d0456098e2 susimail layout tweaks 2016-05-01 05:18:29 +00:00
str4d
a3c9887fe5 Add a bunch of ids and classes to susimail HTML for styling 2016-05-01 05:04:43 +00:00
str4d
327f36d022 Disable spellcheck on SusiDNS config editor 2016-05-01 04:28:05 +00:00
str4d
8eeb902467 Rework "Create Torrent" table 2016-05-01 04:22:45 +00:00
str4d
61e54cf52e Rename i2psnark paging control images 2016-05-01 04:20:46 +00:00
str4d
50291233a1 Various small i2psnark HTML tweaks 2016-05-01 04:18:00 +00:00
str4d
edb3ffcf45 Rework /configui forms for theming 2016-05-01 04:06:28 +00:00
str4d
e34f0443bc Include bandwidth in minimal sidebar 2016-05-01 03:26:36 +00:00
str4d
cb0147a798 Collate help topics under /help 2016-05-01 03:24:25 +00:00
str4d
a7f789f069 Collate /configtunnels infostrings 2016-05-01 02:20:23 +00:00
str4d
66544f41f2 Tweak /stats for theming 2016-05-01 02:16:46 +00:00
str4d
82c55e6008 Remove hard-coded styling that will be moved to CSS 2016-05-01 01:28:49 +00:00
str4d
1ad69e7127 Improve contrast of graphs 2016-05-01 01:17:01 +00:00
str4d
6470f2d983 Wrap /profiles and /viewprofile info in tables for theming 2016-05-01 01:10:04 +00:00
str4d
709ccf6c22 Use tables for /netdb 2016-05-01 01:02:17 +00:00
zzz
2fe1f97ee0 Debian: Add runtime dependency on libhttpclient-java,
link to /usr/share/java/httpclient.jar and httpcore.jar.
This is 2 MB of dependencies to replace 20 KB of copied code,
so may not be worth it, esp. for Tails.
2016-04-30 18:08:50 +00:00
zzz
30ecdedf1f Drop old release checklist doc, current one is in checklist.md 2016-04-30 15:42:29 +00:00
zzz
efdb296468 SAM: Log tweaks (ticket #1778) 2016-04-30 15:02:04 +00:00
zzz
43f7897027 Data: Fix NPE calculating the hash of a RI of unknown sig type 2016-04-30 13:58:36 +00:00
zzz
d8e15dbbc5 Blocklist: Add RFC 6598 addresses 2016-04-30 13:25:09 +00:00
zzz
f3610bc285 reduce log level of RI sig failure 2016-04-30 13:23:24 +00:00
zzz
6bdf25bc3d Console: Only display cpuid information on x86 2016-04-30 13:22:22 +00:00
zzz
a2b2c19cbf Eepsite: comment out gzip filtering in cgi context,
causes hung threads, root cause unknown
2016-04-30 13:20:36 +00:00
zzz
3e09413e0a Console: Readme page link fixes (tickets #1789, #1790) 2016-04-30 13:16:18 +00:00
zzz
139f386fb8 Update: Enable libjbigi update for ARM 2016-04-29 22:34:55 +00:00
zzz
9128c79e05 one more deb build fix 2016-04-29 19:32:25 +00:00
zzz
7ae1483cb3 Fixes for building with libgetopt-java 2016-04-29 19:15:41 +00:00
zzz
c3f5c04bea typo 2016-04-29 18:41:06 +00:00
zzz
2e154881ef Debian: Add runtime dependency on libgetopt-java,
link to /usr/share/java/gnu-getopt.jar,
don't build gnu/getopt source
2016-04-29 18:40:02 +00:00
zzz
f2239ba7d1 Debian: Add runtime dependency on gettext-base,
link to /usr/share/java/libintl.java,
don't build GettextResource.java
2016-04-29 16:39:16 +00:00
zzz
5067b00058 javadoc fixes 2016-04-29 15:35:49 +00:00
zzz
c2e486f72c Debian: Refresh patches after jbigi/jcpuid build script changes 2016-04-29 15:30:55 +00:00
zzz
fbeca5ed80 SysTray: Remove systray4j.jar from linux installers
Move SysTray.java to SysTrayImpl.java
New SysTray.java that instantiates SysTrayImpl
by reflection, so the SysTrayImpl.java source is optional
Remove systray4j.jar, systray4j.dll, and SysTrayImpl.java
from Debian source packages
Remove systray4j.jar from Debian binary packages
2016-04-29 14:57:29 +00:00
zzz
d885e00c64 News: Verify received CRL before saving 2016-04-28 22:17:27 +00:00
zzz
52c9bf6d80 News: Parse and store CRLs in news feed 2016-04-28 21:55:17 +00:00
zzz
03adda3bde CPUID: Add version to /logs 2016-04-28 11:43:11 +00:00
zzz
da62a1114c History for prop, -6 2016-04-28 11:05:20 +00:00
zzz
13d3730fd9 Build: Add updaterWithJbigi and updater200WithJbigi targets 2016-04-28 10:54:40 +00:00
zzz
fb5ef83009 fixup jbigi version display 2016-04-28 02:39:32 +00:00
zzz
94056f68e9 fixup @since after prop 2016-04-28 01:49:45 +00:00
zzz
9f31b1fe97 propagate from branch 'i2p.i2p.zzz.gmp6-prop' (head 416ef26df4b91fb9de3e27623551c7f87ec2bfe0)
to branch 'i2p.i2p' (head 9466fdeae338d6b0bf049d86975db9b6ddbd3064)
2016-04-28 01:34:48 +00:00
dev
414522f8be Added jbigi files ignored from previous commit due to not using --no-respect-ignore 2016-04-27 22:26:34 +00:00
dev
91c8e5cf7f Updated jbigi/jcpuid binaries.
Files changed
-------------

  jcpuid:
      - Rebuilt for OSX/Windows/FreeBSD/Linux

  jbigi:
      - Moved to GMP 6.0.0a
      - Removed NetBSD binaries
      - Removed kFreeBSD binaries
      - Removed Solaris binaries
      - Removed OpenBSD binaries
      - Added coreihwl jbigi support
      - Added coreisbr jbigi support
      - Added bulldozer jbigi support
      - Added steamroller jbigi support
      - Added cortex a9 suppot support
      - Added cortex a15 jbigi support
      - Rebuilt _all_ unmentioned binaries


Build notes jbigi:
------------------
Windows: Cross-compile, linux hosts. Compiler: GCC
Linux: Native build. Compiler: GCC
FreeBSD: Native build, VM. Compiler: GCC
OSX: Native build. Compiler: GCC


Build notes jcpuid:
-------------------
Windows-x64: Native build. Compiler: MSVC
Windows-x86: Cygwin on Windows. Compiler: mingw on Cygwin
Linux: Native build. Compiler: GCC
FreeBSD: Native build. Compiler: GCC
OSX: Native build. Compiler: GCC
2016-04-27 21:35:05 +00:00
zzz
a2873c42bc i2ptunnel: Fix can't connect error message for servers when
in router context, like we did for clients earlier
2016-04-27 15:48:42 +00:00
zzz
967074c2d6 Wrapper: Increase default wrapper.log max size,
so a thread dump is more likely to fit in a single file
2016-04-27 15:46:24 +00:00
zzz
f35eaaf194 i2psnark: Add CommandLine to jar 2016-04-27 14:27:38 +00:00
zzz
6a71c23fd4 Addressbook: Check inner sig even if old name not found
More logging cleanup
2016-04-26 13:50:34 +00:00
zzz
fc8b72768a NamingService, BFNS: Add API methods to lookup all reverse entries
Addressbook: Use new API methods to simplify delete-all code
i2ptunnel: Output full authentication line
HostTxtEntry: More tweaks for i2ptunnel
2016-04-25 19:25:30 +00:00
str4d
03887826e8 Use table for transport legend 2016-04-25 12:03:38 +00:00
zzz
0ac83bd7c1 i2ptunnel: Enhance registration authentication page
- Enable form
- Switch to multipart form for getting old private key file
- Add advanced authentications
PrivateKeyFile: Add InputStream constructor for i2ptunnel
2016-04-24 21:03:10 +00:00
zzz
2a34d1c44a HostTxtEntry: Fixups for use by i2ptunnel
i2ptunnel: Add new registration authentication page
- Remove old, unused hostname signature generation
PrivateKeyFile: Ensure initialization before returning private keys
2016-04-24 18:10:10 +00:00
zzz
799d90e1b5 Addressbook: Move HostTxtEntry to net.i2p.client.naming,
in prep for use by i2ptunnel
2016-04-23 18:07:35 +00:00
zzz
f72753f3eb Addressbook: Store last-modified date
SusiDNS: Display signature validation on details page
2016-04-23 17:11:50 +00:00
zzz
d97908b430 SusiDNS: Add support for multiple dests per hostname 2016-04-23 16:52:15 +00:00
zzz
2fb8faa166 Addressbook:
- Enable parsing and handling of 'remove' actions
- Logging improvements
BFNS: Limit max dests per host
HostTxtEntry: Test improvements
2016-04-23 15:53:02 +00:00
zzz
e016c87fba add routerinfo to command line 2016-04-22 23:47:39 +00:00
zzz
75dd22510b Addressbook: Fix changedest action
- Implement adddest action
- Logging improvements
BFNS: Fix lookupAll() NPE
- Fix addDestination() UOE
- Support long property values
DataHelper: Properties methods cleanup
HostTxtEntry: Test improvements
2016-04-22 23:37:55 +00:00
zzz
55de82bb50 Addressbook: Add tests for Daemon to read local subscription file
More HostTxtEntry 'remove' methods and tests
2016-04-22 12:58:27 +00:00
zzz
4f262f6140 Addressbook: Use new NamingService API methods in action handling
- Refactor HostTxtEntry to consolidate properties writing
- More HostTxtEntry tests
- Start of 'remove' entry handling
Blockfile: Cleanup unused code
- Add Iterable interface to SkipList
2016-04-21 14:37:38 +00:00
zzz
34e390909e Build: Add some config checks before signed-updater tasks 2016-04-20 21:51:44 +00:00
zzz
9b726a8963 BlockfileNamingService: Implement new NamingService API
methods for multiple destinations per hostname
2016-04-20 21:04:30 +00:00
zzz
a0ba623061 Drop kytv's router and news certs 2016-04-20 17:48:19 +00:00
zzz
9ca8a7752a drop unused Blockfile classes 2016-04-20 17:36:13 +00:00
zzz
a4265a23ba BlockfileNamingService: Don't upgrade Android/ARM to version 4 for now,
too slow
2016-04-20 15:23:12 +00:00
zzz
b57b43247d Blockfile: Fixes for finishing interrupted database migration
by tracking version of each list, and catching some exceptions
2016-04-20 15:06:38 +00:00
zzz
436fee9200 Blockfile: Add generics, part 4 2016-04-20 13:08:42 +00:00
zzz
0067c8d1bd Blockfile: Add generics, part 3 2016-04-20 12:59:24 +00:00
zzz
0d19fe44c2 Blockfile: Add generics, part 2 2016-04-20 12:49:03 +00:00
zzz
4d2c227b0d Blockfile: Add generics, part 1 2016-04-20 12:40:28 +00:00
zzz
1a8847d177 Blockfile: Add method to change serialization schema for a skiplist
Fix delIndex() method, broken and previously unused
Improve javadocs
BlockfileNamingService: New database version 4, allows for
multiple destinations per hostname
Disallow database version higher than supported
2016-04-20 00:41:45 +00:00
zzz
e9cf4c21b7 NamingService: Add new API methods for multiple Destinations per hostname
Improve javadocs
2016-04-19 15:11:37 +00:00
zzz
25bce1031b Addressbook: Add sign/verify methods for inner signature
Add preliminary handling of incoming actions
2016-04-19 00:11:46 +00:00
zzz
909622fbd7 Addressbook: Rename ConfigIterator to HostTxtIterator 2016-04-18 13:17:57 +00:00
zzz
2d3d6f73b5 GeoIP: Disable Debian-style files on Android 2016-04-18 13:02:30 +00:00
str4d
44a27008dd Convert various config pages to table layouts 2016-04-18 12:11:05 +00:00
str4d
33229a31ee Use tables for /logs 2016-04-18 05:46:58 +00:00
str4d
653047146a Put /events controls on a single line 2016-04-18 05:36:33 +00:00
str4d
423167fdd3 Make /jobs HTML consistent with other pages 2016-04-18 04:55:57 +00:00
str4d
4547d5887d Move name title above name column on /confighome 2016-04-18 04:45:22 +00:00
str4d
3790129b30 Fix bug in /configui lang selector when not in advanced mode 2016-04-18 04:32:55 +00:00
str4d
aa95750e1f Make /configclients plugin links consistent with other details 2016-04-18 04:29:57 +00:00
str4d
ac6cd7e4c6 Add a bunch of ids and classes to routerconsole HTML for styling 2016-04-18 04:12:15 +00:00
zzz
b69677b709 Addressbook: Add initial support for signatures in subscriptions
More cleanups
SingleFileNamingService: Store signature properties on write
2016-04-17 20:20:10 +00:00
zzz
0ceb9576b9 PrivateKeyFile: Add method to specify sig type on creation 2016-04-17 15:55:41 +00:00
zzz
193ad4306e Util: Minor optimization in OrderedProperties 2016-04-17 15:29:18 +00:00
zzz
4290b1e795 Addressbook build:
- Fix main-class in addressbook.jar
- Fix corrupted manifest in addressbook.jar
2016-04-17 15:28:10 +00:00
zzz
3428995906 Build: Fix broken build from scratch in jetty build.xml 2016-04-17 12:43:43 +00:00
zzz
ca3f9963c6 Addressbook: More cleanups 2016-04-16 21:01:05 +00:00
zzz
ebbf7f23ac Addressbook: Cleanups
in advance of new subscription protocol work:
- finals
- Add Iterable interfaces
- Comment out unused methods
- public->private methods
- Close resources in finally blocks
- Javadocs, spelling fixes
- Increase max subscription size
- LinkedList -> ArrayList
- Improve while loops for reading lines
2016-04-16 18:35:46 +00:00
zzz
696c2152b3 Tunnel build stat tweak (commented out) 2016-04-16 16:21:28 +00:00
zzz
b66bc39db3 log tweak 2016-04-16 16:14:30 +00:00
zzz
df16ce6f77 javadoc note 2016-04-16 16:11:57 +00:00
zzz
a438722eed TunnelId: Add max value check 2016-04-16 16:10:56 +00:00
zzz
4e635aa485 Console: Add JSTL version to /logs 2016-04-16 16:05:19 +00:00
zzz
25fe886e72 Update version warnings
Add OpenJDK check for ARM
Uncomment SystemVersion.main()
2016-04-16 15:53:34 +00:00
zzz
5a2975ba65 SOCKS: Fix NPE on lookup failure in SOCKS 4a
Remove duplicate lookups in SOCKS 5
Log tweaks
Streaming, i2ptunnel: Catch null destination in connect() calls
Synchronize Connection.setRemotePeer(); remove _remotePeerSet field
2016-04-13 13:40:46 +00:00
zzz
094cf14d4a Debian:
Prep for dependency on libtomcat7
Doesn't work yet, breaks susidns.
glassfish-javaee for jstl.jar and standard.jar version 1.2 won't work with tomcat7,
it's ancient and not compatible with recent el libs.
Add back option to depend on libjakarta-taglibs-standard and libjstl1.1-java which are version 1.1.2,
but not clear if they will work with tomcat7 either, even though they are
dependencies of libjetty8-extra-java.
We switched from JSTL 1.1.2 to JSTL 1.2 when we went from Jetty 5 to Jetty 6 in 2012.
1.2 libs are not available anywhere except for Glassfish, and
Debian only has the ancient Java EE 5 Glassfish 2.1.
Not clear there's any way to get susidns (and bote) to work with both Tomcat 6 and 7.
- Fix wrong jsp-api version
- Fix other minor errors in install and links files.
- Log stack trace for Jetty warnings if log level is WARN
- SusiDNS: Move standard.jar and jstl.jar out of WEB-INF/lib, where Tomcat 7 build refuses to find them
2016-04-07 14:38:30 +00:00
zzz
5c8eab9dfb Debian: Add dependency on glassfish-javaee for jstl.jar and standard.jar version 1.2
don't echo comments in debian/rules
2016-04-04 18:07:43 +00:00
zzz
ae5828fdb1 history for prop, -1 2016-04-03 15:20:28 +00:00
zzz
b79471e0ca propagate from branch 'i2p.i2p.zzz.debian' (head c630b2a47f63476018a63783a9ae2a8a58503d87)
to branch 'i2p.i2p' (head 700a07a64359e4f328d1002e559f4585c6f02f19)
2016-04-03 15:16:52 +00:00
zzz
18391ac7db another fix 2016-04-03 14:19:20 +00:00
zzz
c3a1f153c1 another fix 2016-04-03 13:53:03 +00:00
zzz
d940aa5a44 typo 2016-04-03 13:35:12 +00:00
zzz
d6b1f813a8 Debian: Fixes for with-libjetty8-java builds 2016-04-03 13:04:23 +00:00
zzz
f867a9d4ce Debian: Update launchpad instructions
Add debian build instructions
2016-04-02 13:30:15 +00:00
zzz
e2f048b2ac Debian:
Add dependency on libjetty8-java and libservlet3.0-java packages
Remove those binaries in debian builds
Prep for dependency on libservlet2.5-java package
Prep for dependency on libtomcat6-java package
Prep for dependency on libtomcat7-java package
Prep for dependency on libjakarta-taglibs-standard-java package
Prep for dependency on libjstl1.1-java package
Add build properties for building with packages
Rework of apps/jetty/build.xml for building with packages
Redefine debian/ as the files for the jessie build
Make debian-alt directories for ubuntu builds
Move debian/changelog to debian-alt/trusty/changelog
Move debian-alt/jessie/changelog to debian/changelog
Add apps/jetty/jettylib/jsp-api.jar to classpath for jsp builds
2016-04-01 18:19:06 +00:00
echelon2
a834cef1f4 added devscripts to list of needed debian packages 2016-04-01 16:24:57 +00:00
zzz
a493a2842a propagate from branch 'i2p.i2p' (head 809274054ef446273ea312a631fe7482fa53c030)
to branch 'i2p.i2p.zzz.debian' (head 437e22ee74e32e103bb8475007b1d1a2f995ef28)
2016-03-31 22:42:52 +00:00
zzz
f3c679e615 Debian: Update debian-alt files based on 0.9.25 released packages.
Delete files in debian-alt if the current package version
is now the same as what's in debian/
debian-alt/precise/ contains fixes for precise builds.
2016-03-31 21:14:46 +00:00
zzz
e69f39f6e3 Debian:
Add build property to prevent bundling of geoip.txt and geoipv6.dat.gz
2016-03-31 14:51:42 +00:00
zzz
b95f30b7d6 build: add missing distclean targets 2016-03-29 22:35:38 +00:00
zzz
17b1d524de Debian: Delete debian-alt in debian-tarball target
Add debian-release-tarball target
2016-03-29 19:06:56 +00:00
zzz
66be14016b Debian: Add alternate debian files for other series 2016-03-29 12:51:38 +00:00
zzz
4be46d8299 Debian: Restore --with quilt in debian/rules,
inadvertently removed in previous checkin, which broke patch.
2016-03-28 10:43:41 +00:00
echelon2
2fb0572e08 updated ant debianhowto to reflect the needed libwrapper package on debian 2016-03-27 21:00:34 +00:00
zzz
169fd56527 Transport:
Include Maxmind geoip-api-java library v1.3.1 (LGPL v2.1)
Use Maxmind database for geoip lookup if it exists
Debian:
Don't bundle geoip.txt and geoipv6.dat.gz, depend on geoip-database instead
2016-03-27 12:55:28 +00:00
zzz
97a6cbda3e Debian: Set bootclasspath in override.properties
Require openjdk-7-jdk to build hso we have the correct bootclasspath jars
2016-03-26 17:28:58 +00:00
zzz
51e04f7c6e Debian: Remove libcommons-logging-java build dependency
mtn-ignore tweak
2016-03-26 15:26:55 +00:00
zzz
ee138a2b36 Build:
Don't bundle launch4j licenses in non-windows builds
Clarify in LICENSES.txt that launch4j is not bundled in non-windows builds and packages
Debian:
Change maintainer
Remove Debian patch that drops the launch4j licenses
2016-03-26 14:44:37 +00:00
zzz
5405792fad Debian:
Add missing patch with update for .25
Add missing line to require wrapper
Add launchpad help document
Add .24 and .25 releases to changelog
2016-03-26 13:56:57 +00:00
zzz
1da9c21f13 drop kytv certs 2016-03-23 13:53:26 +00:00
zzz
7eed4fa97b build dependency tweak 2016-03-23 13:46:33 +00:00
zzz
557f16b8d5 NetDB: Improve handling of deferred search result jobs 2016-03-20 13:41:26 +00:00
zzz
ed72847374 Add SystemVersion.isOpenJDK()
Add warning for OpenJDK + ARM
2016-03-20 13:21:40 +00:00
zzz
645bd3d383 propagate from branch 'i2p.i2p' (head 110585552852c1f9c61a3a2efb4f17d62b0c1b2e)
to branch 'i2p.i2p.zzz.test2' (head 558ec52091868b7fa66af462f84044df1bede8cb)
2016-03-19 15:18:17 +00:00
zzz
2e7a7f26f8 take out code for stats removed in .24 2016-03-19 15:18:07 +00:00
zzz
3474b827b0 add raw signing test 2016-03-19 15:16:38 +00:00
zzz
0de1ca161c CPUID: Restore AES-NI diagnostic output, inadvertently removed 2016-02-26 15:36:00 +00:00
dev
9445690cb1 Fixed OSX include search path. 2016-03-12 19:36:21 +00:00
dev
f4abb284eb Imported Microsoft Visual Studio Comminuty 2015 project files.
These were used to create the jcpuid-x86-windows.dll
2016-02-03 21:04:10 +00:00
dev
eb696c8993 Added correct build instructions for jcpuid on windows. 2016-02-03 18:31:18 +00:00
dev
c9818e607f Improved jcpuid build script 2016-01-26 00:06:39 +00:00
dev
305f45fb30 Added jcpuid build instructions for linux/osx/freebsd/windows 2016-01-26 00:06:05 +00:00
dev
3e4d77452a Added support an missing binary for AMD K10 arch. 2015-12-27 13:22:34 +00:00
zzz
71d4b5f49f Broadwell/Skylake tweak 2015-12-16 20:52:14 +00:00
zzz
31efa7c980 Recognize Skylake
Do the same checks for Broadwell and Skylake that we do
for Haswell, and check ADX as well, which will be used
in GMP 6.1.
Javadocs
2015-12-16 20:32:54 +00:00
zzz
89e5e1d308 Fix class for nativeJcpuidVersion()
Add output for nativeJcpuidVersion()
Change CPUIDCPUInfo back to package private
More @since fixes
2015-12-16 15:55:39 +00:00
zzz
1e3e02d1f0 CPUID: Clear ECX register to ensure it will work with EAX=7
Tested on linux only
Add nativeJcpuidVersion()
Only call getCPUVendorID() once in getInfo()
Change all @since to 0.9.25 in hopes it will come true
Tab removal
Javadoc tweaks
2015-12-16 15:02:03 +00:00
dev
1f4a266c22 Added more checks to Haswell identification.. 2015-12-15 20:34:28 +00:00
dev
93fbdcd443 Made CPUIDCPUInfo non-abstract to support looking for CPU features during CPU identification. 2015-12-15 17:19:37 +00:00
dev
0e6e90baf0 Cleaned up BMI1/BMI2/AVX2/FMA3/MOVBE/ABM support. 2015-12-15 05:29:58 +00:00
dev
2c8179f057 Added hasBMI2() feature detection and use it to list some Celeron Haswell CPUs as non-Haswell CPUs. 2015-12-14 18:54:58 +00:00
zzz
fe3642edd4 CPUID: Multiple bug fixes:
- Add support for extended feature registers EBX/ECX
 - No such thing as EBX for 0x80000001 call; remove getExtendedEBXCPUFlags() method,
   replaced with getExtendedEBXFeatureFlags()
 - Check for support of 6 required Core i3/i5/i7 instructions to enable Haswell,
   since GMP Haswell requires Core i3/i5/i7 support.
   There are Pentium/Celeron Haswells that do not support these instructions.
 - Fix hasAVX2(), hasAVX512(), and hasADX() using wrong register
 - Fix hasAVX512() checking wrong bit
 - Define hasAVX512() as supporting AVX-512 Foundation, not the "full"
   instruction set as previously specified in the javadocs.
 - hasAVX2(), hasAVX512(), and hasADX() need not check hasAVX() first
 - Add missing hasADX() to CPUInfo interface
Also:
 - More diagnostic output in CPUID.main()
 - More javadocs
2015-12-12 22:53:33 +00:00
dev
5df3f404f8 Fixed support for Atom CPUs. 2015-12-08 00:36:49 +00:00
dev
eec87bd814 Removed error print for cases of 'null' primary, where CPU identification has failed. 2015-10-15 17:42:30 +00:00
zzz
f8163241ef NBI test improvements:
- Try to prevent not-coprime errors
- Minor cleanups
- Javadoc fix
Fix build script typo
2015-10-09 16:35:00 +00:00
dev
6a0d421ed0 merge of '8e2524075b463bca9f87a992a87b439210abbc96'
and 'b6a391f4f621d58d7d94c1fc3f5b58f8679081da'
2015-10-08 01:18:43 +00:00
dev
c1c3a92331 Fixed case statement to be independent of case. 2015-10-08 01:18:38 +00:00
dev
1dfc8187ca merge of '0901b31b94e8472e5578cd5ac685500044fc07de'
and 'c7d6075d6f3c0ea1035d8c839773da25634842e4'
2015-10-07 18:45:27 +00:00
dev
075c4d4822 Changed scripts to be SH compatible instead of bash. 2015-10-05 14:13:38 +00:00
zzz
07fa3eb922 NBI test improvements:
- Output versions
- Only warmup crypto once
- Add -n option to test native only
- Reduce output if only native or only java tested
2015-10-04 13:58:28 +00:00
dev
489ff65e34 Added OSX notei 2015-09-30 16:17:09 +00:00
dev
bf76c57de7 Added FreeBSD cross-compilation instructions. 2015-09-30 15:07:09 +00:00
dev
2bc87662aa Added 'osx' alias for darwin. 2015-09-29 15:34:57 +00:00
dev
73228a1514 Revamped downloading of gmp files.
Revamped cross-compilation support.
2015-09-29 15:31:42 +00:00
dev
0848e34243 Replaced 0 with NULL to fix miscompilation on windows. 2015-09-24 22:13:33 +00:00
zzz
b0c3c11bd9 Start work on Jetty 9
targetting 9.2.x for now
Requires Java 7
2015-08-09 13:36:24 +00:00
dev
5c56de7218 Add x86 and x86_64 targets. 2015-06-14 18:39:12 +00:00
dev
f33e5c2845 Revert accidental commit to ConsoleUpdateManager 2015-06-14 17:57:59 +00:00
dev
52b362dedf merge of '3c853434727997386e691eed12478317c5c5b918'
and 'e62ecd3b1887712e2408f2c716873e9433ee2e4f'
2015-06-13 19:57:10 +00:00
dev
ecb28eb480 Added support for all ARM targets provided in GMP, on platforms running Linux. 2015-06-13 19:57:05 +00:00
dev
69a5f94642 merge of '2ba51476b19c182b894a5cf98f3fff6befb555a9'
and '51c05045ee9faacb879cfc893db82eaa3db99b4d'
2015-06-13 19:55:59 +00:00
zzz
a984745689 Cleanups after review, part 1:
- change crit() to error() and remove crit()
- comment out some System.out.println()s
- Back out a couple of code moves to minimize the diff for review
- Spelling fixes, comment cleanups, spacing tweaks
- Tweaks for efficiency
- Remove / comment out unused methods
- Make ARM architecture have priority over model string,
  except for ARMv6 (Raspberry Pi workaround)
- Restore check for ARM architecture first char only,
  not exact match
- Try architecture and model string even if implementer and part are absent
- Return null immediately for Windows ARM
2015-06-13 17:35:45 +00:00
zzz
6076bb3b2b modPowCT requires GMP 5 2015-05-26 18:16:55 +00:00
dev
1a012dfca1 Removed exec flag from some jbigi libs. 2015-05-26 15:18:48 +00:00
dev
e0fe2439e6 Stripped ARM jbigi binaries. 2015-05-26 15:06:02 +00:00
dev
34d3009439 Added GMP6 compilations of jbigi for Intel CPUs on linux, built on Intel Haswell. 2015-05-25 21:10:47 +00:00
dev
70c2838421 Added GMP6 compilations of jbigi for ARM CPUs on linux, built on Raspberry Pi 2. 2015-05-25 19:43:29 +00:00
dev
63a5b4803c Added support for ARM A12/A17 using the A15 libs. 2015-05-25 19:30:28 +00:00
dev
67760c8bea Corrected make clean call 2015-05-25 18:16:19 +00:00
dev
9130d556d8 merge of '6d6ce6e9e717c56881e728cc3b5fad45897d58b2'
and '8fa65646f9dfb055d71d24fc4d3c26510da48a54'
2015-05-25 18:01:41 +00:00
dev
50d46006ae Added support for ARM Cortex A5/A7/A8/A9/A15. 2015-05-25 18:01:37 +00:00
dev
583a050281 merge of '6040534dc82b5160fea1d95bec37c98497f0f22c'
and 'e8ebf9b71d96f8107ed295d94502a04dc70d1414'
2015-05-25 17:49:26 +00:00
dev
2185a65de6 Added -j flag to make to use parallel compilation. 2015-05-25 17:49:11 +00:00
dev
9134d2856f Don't unpack gmp before every build. Do a distclean instead. 2015-05-23 18:48:35 +00:00
dev
68adfa80af Added support for new CPUs
- Intel: Sandy Bridge, Haswell and Broadwell
- AMD: Bulldozer, Piledriver, Steamroller, Excavator and Jaguar
2015-05-20 01:06:26 +00:00
dev
1e8c299be2 Fixed comments 2015-05-19 12:36:02 +00:00
dev
39cb60e72b Added AVX/AVX2/AVX512/TBM feature detection 2015-05-19 12:31:15 +00:00
dev
d5d4dbb078 Added source of CPUID information 2015-04-29 15:52:08 +00:00
dev
815f275d8b Added source of CPUID information 2015-04-29 15:51:34 +00:00
dev
fdad8f0c34 Added support for new AMD CPUs
- Jaguar added
 - Bulldozer derivatives (Piledriver, Steamroller and Excavator) added
2015-04-29 15:48:52 +00:00
dev
827b7b64d2 merge of '1a475694d7840a7be029691e7ba97ee7afca80d4'
and '3d8d9d506f96418982baac68a992ec62a0278a35'
2015-04-27 00:29:51 +00:00
dev
e5cd33cedb merge of '7a80d824309a75c1f02df0c50ccddd0f8e65e9dd'
and '874cdc3aa5783e115f79ce6ef7d797ff33bd8ab9'
2015-04-24 20:31:35 +00:00
dev
a074654916 Reformatted and added support for some Intel architectures 2015-04-24 20:31:01 +00:00
zzz
54f9d1eb63 fix typo 2015-04-24 20:20:50 +00:00
zzz
12099753ad NBI: core2_64 is always a fallback for corei_64 2015-04-23 09:33:44 +00:00
zzz
db4e09efa3 jbigi: Drop 32-bit corei libs where they are identical to the
core2 lib, since we now have a generic fallback in NBI:
	libjbigi-freebsd-corei.so
	libjbigi-linux-corei.so
	libjbigi-osx-corei.jnilib
Remaining corei libs are not identical to the core2 version
(although they may have the same size)
2015-04-22 23:20:01 +00:00
zzz
8fa1e6ee11 NBI: remove special case for core2/corei in getMiddleName2()
since it's now a fallback in getResourceList()
2015-04-22 23:11:17 +00:00
zzz
e7a33dfd64 NBI: core2 is always a fallback for corei 2015-04-22 22:50:51 +00:00
zzz
55c411a495 Add coreisbr coreihwl coreibwl targets, thx tuna
Reorder the builds so the new ones are build first, for easier testing
2015-04-22 22:10:42 +00:00
zzz
a3c6cc1daa libjbigi updates:
Added:
     nativeJbigiVersion()
     nativeGMPMajorVersion()
     nativeGMPMinorVersion()
     nativeGMPPatchVersion()
     nativeModInverse()
     nativeModPowCT()
   Support negative vaules in conversion functions
   Support negative base value in modPow()
   Throw ArithmeticException for bad arguments rather than crashing
   Switch to GMP 6.0.0
   New build targets
NativeBigInteger changes:
   Test improvements
   Version reporting
Crypto changes:
   Use constant time modPow() for signing and decryption
   Use native modInverse()
2014-11-30 21:19:28 +00:00
2274 changed files with 379403 additions and 150431 deletions

6
.idea/ant.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AntConfiguration">
<buildFile url="file://$PROJECT_DIR$/build.xml" />
</component>
</project>

22
.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

3
.idea/copyright/profiles_settings.xml generated Normal file
View File

@@ -0,0 +1,3 @@
<component name="CopyrightManager">
<settings default="" />
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="javax.servlet.jsp-2.2.0.v201112011158">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

22
.idea/libraries/jettylib.xml generated Normal file
View File

@@ -0,0 +1,22 @@
<component name="libraryTable">
<library name="jettylib">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-security-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlets-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-deploy-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-util-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlet-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-http-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-xml-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-server-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/servlet-api-3.0.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-jmx-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-webapp-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-io-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-continuation-8.1.17.v20150415.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-rewrite-8.1.17.v20150415.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/jrobin_1_5_9_1.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="jrobin-1.5.9.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jrobin/jrobin-1.5.9.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

10
.idea/libraries/lib.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="lib">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/jstl.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/standard.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/start.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="start">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/start.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/systray4j.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="systray4j">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/systray/java/lib/systray4j.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/tomcat_coyote_util.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="tomcat-coyote-util">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat/lib/tomcat-coyote-util.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

12
.idea/libraries/tomcat_lib.xml generated Normal file
View File

@@ -0,0 +1,12 @@
<component name="libraryTable">
<library name="tomcat-lib">
<CLASSES>
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/tomcat-juli.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/el-api.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper.jar!/" />
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper-el.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/wrapper.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="wrapper">
<CLASSES>
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/all/wrapper.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

9
.idea/libraries/wrapper_win.xml generated Normal file
View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="wrapper-win">
<CLASSES>
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/win-all/wrapper.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

57
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ClientPropertiesManager">
<properties class="javax.swing.AbstractButton">
<property name="hideActionText" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JComponent">
<property name="html.disable" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JEditorPane">
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
<property name="charset" class="java.lang.String" />
</properties>
<properties class="javax.swing.JList">
<property name="List.isFileList" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JPasswordField">
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JSlider">
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
<property name="JSlider.isFilled" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JTable">
<property name="Table.isFileList" class="java.lang.Boolean" />
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JToolBar">
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
</properties>
<properties class="javax.swing.JTree">
<property name="JTree.lineStyle" class="java.lang.String" />
</properties>
<properties class="javax.swing.text.JTextComponent">
<property name="caretAspectRatio" class="java.lang.Double" />
<property name="caretWidth" class="java.lang.Integer" />
</properties>
</component>
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build" />
</component>
</project>

27
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/apps/BOB/BOB.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/apps/addressbook/addressbook.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/admin/admin.iml" filepath="$PROJECT_DIR$/apps/admin/admin.iml" />
<module fileurl="file://$PROJECT_DIR$/core/core.iml" filepath="$PROJECT_DIR$/core/core.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" filepath="$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" filepath="$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" />
<module fileurl="file://$PROJECT_DIR$/installer/installer.iml" filepath="$PROJECT_DIR$/installer/installer.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/apps/jetty/jetty.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" />
<module fileurl="file://$PROJECT_DIR$/router/router.iml" filepath="$PROJECT_DIR$/router/router.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/sam/sam.iml" filepath="$PROJECT_DIR$/apps/sam/sam.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/apps/streaming/streaming.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/apps/susidns/susidns.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/apps/susimail/susimail.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/systray/systray.iml" filepath="$PROJECT_DIR$/apps/systray/systray.iml" />
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" filepath="$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" />
</modules>
</component>
</project>

6
.idea/runConfigurations/updater.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="updater" type="AntRunConfiguration" factoryName="Ant Target">
<antsettings antfile="file://$PROJECT_DIR$/build.xml" target="updater" />
<method />
</configuration>
</component>

View File

@@ -37,9 +37,14 @@ web-out.xml
/tmp
^apps/jetty/jettylib
# MSVC files
core/c/jcpuid/msvc/*.opendb
core/c/jcpuid/msvc/*.pdb
core/c/jcpuid/msvc/*.sdf
core/c/jcpuid/msvc/*.user
# Debian-related
^debian/copyright
^debian/changelog
^.pc/
# Build property overrides

View File

@@ -6,10 +6,12 @@ trans.cs = apps/i2ptunnel/locale/messages_cs.po
trans.da = apps/i2ptunnel/locale/messages_da.po
trans.de = apps/i2ptunnel/locale/messages_de.po
trans.es = apps/i2ptunnel/locale/messages_es.po
trans.fi = apps/i2ptunnel/locale/messages_fi.po
trans.fr = apps/i2ptunnel/locale/messages_fr.po
trans.hu = apps/i2ptunnel/locale/messages_hu.po
trans.it = apps/i2ptunnel/locale/messages_it.po
trans.ja = apps/i2ptunnel/locale/messages_ja.po
trans.ko = apps/i2ptunnel/locale/messages_ko.po
trans.nb = apps/i2ptunnel/locale/messages_nb.po
trans.nl = apps/i2ptunnel/locale/messages_nl.po
trans.nn = apps/i2ptunnel/locale/messages_nn.po
@@ -20,6 +22,7 @@ trans.ro = apps/i2ptunnel/locale/messages_ro.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.tr_TR = apps/i2ptunnel/locale/messages_tr.po
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
trans.vi = apps/i2ptunnel/locale/messages_vi.po
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
@@ -32,11 +35,13 @@ trans.ar = apps/i2ptunnel/locale-proxy/messages_ar.po
trans.cs = apps/i2ptunnel/locale-proxy/messages_cs.po
trans.de = apps/i2ptunnel/locale-proxy/messages_de.po
trans.es = apps/i2ptunnel/locale-proxy/messages_es.po
trans.fi = apps/i2ptunnel/locale-proxy/messages_fi.po
trans.fr = apps/i2ptunnel/locale-proxy/messages_fr.po
trans.hu = apps/i2ptunnel/locale-proxy/messages_hu.po
;; Java converts id to in
trans.id = apps/i2ptunnel/locale-proxy/messages_in.po
trans.it = apps/i2ptunnel/locale-proxy/messages_it.po
trans.ko = apps/i2ptunnel/locale-proxy/messages_ko.po
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
@@ -46,6 +51,7 @@ trans.ro = apps/i2ptunnel/locale-proxy/messages_ro.po
trans.ru_RU = apps/i2ptunnel/locale-proxy/messages_ru.po
trans.sk = apps/i2ptunnel/locale-proxy/messages_sk.po
trans.sv_SE = apps/i2ptunnel/locale-proxy/messages_sv.po
trans.tr_TR = apps/i2ptunnel/locale-proxy/messages_tr.po
trans.uk_UA = apps/i2ptunnel/locale-proxy/messages_uk.po
trans.vi = apps/i2ptunnel/locale-proxy/messages_vi.po
trans.zh_CN = apps/i2ptunnel/locale-proxy/messages_zh.po
@@ -65,6 +71,7 @@ trans.fr = apps/routerconsole/locale/messages_fr.po
trans.hu = apps/routerconsole/locale/messages_hu.po
trans.it = apps/routerconsole/locale/messages_it.po
trans.ja = apps/routerconsole/locale/messages_ja.po
trans.ko = apps/routerconsole/locale/messages_ko.po
trans.nb = apps/routerconsole/locale/messages_nb.po
trans.nl = apps/routerconsole/locale/messages_nl.po
trans.pl = apps/routerconsole/locale/messages_pl.po
@@ -83,10 +90,13 @@ trans.zh_TW = apps/routerconsole/locale/messages_zh_TW.po
source_file = apps/routerconsole/locale-news/messages_en.po
source_lang = en
trans.ar = apps/routerconsole/locale-news/messages_ar.po
trans.cs = apps/routerconsole/locale-news/messages_cs.po
trans.de = apps/routerconsole/locale-news/messages_de.po
trans.el = apps/routerconsole/locale-news/messages_el.po
trans.es = apps/routerconsole/locale-news/messages_es.po
trans.fi = apps/routerconsole/locale-news/messages_fi.po
trans.fr = apps/routerconsole/locale-news/messages_fr.po
trans.gl = apps/routerconsole/locale-news/messages_gl.po
trans.he = apps/routerconsole/locale-news/messages_he.po
;; Java converts id to in
trans.id = apps/routerconsole/locale-news/messages_in.po
@@ -103,6 +113,7 @@ 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.sq = apps/routerconsole/locale-news/messages_sq.po
trans.sr = apps/routerconsole/locale-news/messages_sr.po
trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
trans.uk_UA = apps/routerconsole/locale-news/messages_uk.po
@@ -119,11 +130,14 @@ trans.de = apps/routerconsole/locale-countries/messages_de.po
trans.el = apps/routerconsole/locale-countries/messages_el.po
trans.es = apps/routerconsole/locale-countries/messages_es.po
trans.et_EE = apps/routerconsole/locale-countries/messages_et.po
trans.fa = apps/routerconsole/locale-countries/messages_fa.po
trans.fi = apps/routerconsole/locale-countries/messages_fi.po
trans.fr = apps/routerconsole/locale-countries/messages_fr.po
trans.gl = apps/routerconsole/locale-countries/messages_gl.po
trans.hu = apps/routerconsole/locale-countries/messages_hu.po
trans.it = apps/routerconsole/locale-countries/messages_it.po
trans.ja = apps/routerconsole/locale-countries/messages_ja.po
trans.ko = apps/routerconsole/locale-countries/messages_ko.po
trans.mg = apps/routerconsole/locale-countries/messages_mg.po
trans.nb = apps/routerconsole/locale-countries/messages_nb.po
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
@@ -135,8 +149,8 @@ trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
trans.sq = apps/routerconsole/locale-countries/messages_sq.po
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
trans.zh_CN = apps/routerconsole/locale-countries/messages_zh.po
trans.zh_TW = apps/routerconsole/locale-countries/messages_zh_TW.po
@@ -148,18 +162,23 @@ trans.ar = apps/i2psnark/locale/messages_ar.po
trans.cs = apps/i2psnark/locale/messages_cs.po
trans.de = apps/i2psnark/locale/messages_de.po
trans.es = apps/i2psnark/locale/messages_es.po
trans.fi = apps/i2psnark/locale/messages_fi.po
trans.fr = apps/i2psnark/locale/messages_fr.po
trans.hu = apps/i2psnark/locale/messages_hu.po
trans.it = apps/i2psnark/locale/messages_it.po
trans.ja = apps/i2psnark/locale/messages_ja.po
trans.ko = apps/i2psnark/locale/messages_ko.po
trans.nb = apps/i2psnark/locale/messages_nb.po
trans.nl = apps/i2psnark/locale/messages_nl.po
trans.pl = apps/i2psnark/locale/messages_pl.po
trans.pt = apps/i2psnark/locale/messages_pt.po
trans.pt_BR = apps/i2psnark/locale/messages_pt_bR.po
trans.pt_BR = apps/i2psnark/locale/messages_pt_BR.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.tr_TR = apps/i2psnark/locale/messages_tr.po
trans.uk_UA = apps/i2psnark/locale/messages_uk.po
trans.vi = apps/i2psnark/locale/messages_vi.po
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
@@ -172,10 +191,13 @@ trans.da = apps/susidns/locale/messages_da.po
trans.de = apps/susidns/locale/messages_de.po
trans.el = apps/susidns/locale/messages_el.po
trans.es = apps/susidns/locale/messages_es.po
trans.fi = apps/susidns/locale/messages_fi.po
trans.fr = apps/susidns/locale/messages_fr.po
trans.gl = apps/susidns/locale/messages_gl.po
trans.hu = apps/susidns/locale/messages_hu.po
trans.it = apps/susidns/locale/messages_it.po
trans.ja = apps/susidns/locale/messages_ja.po
trans.ko = apps/susidns/locale/messages_ko.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
@@ -187,27 +209,40 @@ trans.tr_TR = apps/susidns/locale/messages_tr.po
trans.uk_UA = apps/susidns/locale/messages_uk.po
trans.vi = apps/susidns/locale/messages_vi.po
trans.zh_CN = apps/susidns/locale/messages_zh.po
trans.zh_TW = apps/susidns/locale/messages_zh_TW.po
[I2P.desktopgui]
source_file = apps/desktopgui/locale/messages_en.po
source_lang = en
trans.ar = apps/desktopgui/locale/messages_ar.po
trans.bg = apps/desktopgui/locale/messages_bg.po
trans.ca = apps/desktopgui/locale/messages_ca.po
trans.cs = apps/desktopgui/locale/messages_cs.po
trans.da = apps/desktopgui/locale/messages_da.po
trans.de = apps/desktopgui/locale/messages_de.po
trans.el = apps/desktopgui/locale/messages_el.po
trans.es = apps/desktopgui/locale/messages_es.po
trans.fa = apps/desktopgui/locale/messages_fa.po
trans.fi = apps/desktopgui/locale/messages_fi.po
trans.fr = apps/desktopgui/locale/messages_fr.po
trans.gl = apps/desktopgui/locale/messages_gl.po
trans.hu = apps/desktopgui/locale/messages_hu.po
;; Java converts id to in
trans.id = apps/desktopgui/locale/messages_in.po
trans.it = apps/desktopgui/locale/messages_it.po
trans.ja = apps/desktopgui/locale/messages_ja.po
trans.ko = apps/desktopgui/locale/messages_ko.po
trans.mg = apps/desktopgui/locale/messages_mg.po
trans.nb = apps/desktopgui/locale/messages_nb.po
trans.nl = apps/desktopgui/locale/messages_nl.po
trans.pl = apps/desktopgui/locale/messages_pl.po
trans.pt = apps/desktopgui/locale/messages_pt.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.sq = apps/desktopgui/locale/messages_sq.po
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
trans.vi = apps/desktopgui/locale/messages_vi.po
@@ -216,29 +251,37 @@ trans.zh_CN = apps/desktopgui/locale/messages_zh.po
[I2P.susimail]
source_file = apps/susimail/locale/messages_en.po
source_lang = en
trans.ar = apps/susimail/locale/messages_ar.po
trans.cs = apps/susimail/locale/messages_cs.po
trans.da = apps/susimail/locale/messages_da.po
trans.de = apps/susimail/locale/messages_de.po
trans.el = apps/susimail/locale/messages_el.po
trans.es = apps/susimail/locale/messages_es.po
trans.fi = apps/susimail/locale/messages_fi.po
trans.fr = apps/susimail/locale/messages_fr.po
trans.gl = apps/susimail/locale/messages_gl.po
trans.hu = apps/susimail/locale/messages_hu.po
;; Java converts id to in
trans.id = apps/susimail/locale/messages_in.po
trans.it = apps/susimail/locale/messages_it.po
trans.ja = apps/susimail/locale/messages_ja.po
trans.ko = apps/susimail/locale/messages_ko.po
trans.mg = apps/susimail/locale/messages_mg.po
trans.nb = apps/susimail/locale/messages_nb.po
trans.nl = apps/susimail/locale/messages_nl.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.ru_RU = apps/susimail/locale/messages_ru.po
trans.sk = apps/susimail/locale/messages_sk.po
trans.sq = apps/susimail/locale/messages_sq.po
trans.sv_SE = apps/susimail/locale/messages_sv.po
trans.tr_TR = apps/susimail/locale/messages_tr.po
trans.uk_UA = apps/susimail/locale/messages_uk.po
trans.vi = apps/susimail/locale/messages_vi.po
trans.zh_CN = apps/susimail/locale/messages_zh.po
trans.zh_TW = apps/susimail/locale/messages_zh_TW.po
[I2P.debconf]
source_file = debian/po/templates.pot
@@ -249,6 +292,7 @@ trans.el = debian/po/el.po
trans.es = debian/po/es.po
trans.fi = debian/po/fi.po
trans.fr = debian/po/fr.po
trans.gl = debian/po/gl.po
trans.id = debian/po/id.po
trans.it = debian/po/it.po
trans.hu = debian/po/hu.po
@@ -263,26 +307,23 @@ trans.ru_RU = debian/po/ru.po
trans.sk = debian/po/sk.po
trans.sq = debian/po/sq.po
trans.sv_SE = debian/po/sv.po
trans.uk_UA = debian/po/uk.po
trans.tr_TR = debian/po/tr.po
trans.uk_UA = debian/po/uk.po
trans.zh_CN = debian/po/zh.po
trans.zh_TW = debian/po/zh_TW.po
[I2P.i2prouter-script]
source_file = installer/resources/locale/po/messages_en.po
source_lang = en
;; currently fails check
;;trans.ca = installer/resources/locale/po/messages_ca.po
trans.ca = installer/resources/locale/po/messages_ca.po
trans.de = installer/resources/locale/po/messages_de.po
trans.es = installer/resources/locale/po/messages_es.po
;; currently fails check
;;trans.fi = installer/resources/locale/po/messages_fi.po
trans.fi = installer/resources/locale/po/messages_fi.po
trans.fr = installer/resources/locale/po/messages_fr.po
trans.id = installer/resources/locale/po/messages_id.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
;; currently fails check
;;trans.ko = installer/resources/locale/po/messages_ko.po
trans.ko = installer/resources/locale/po/messages_ko.po
trans.nl = installer/resources/locale/po/messages_nl.po
trans.pl = installer/resources/locale/po/messages_pl.po
trans.pt = installer/resources/locale/po/messages_pt.po
@@ -292,8 +333,7 @@ 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
;; currently fails check
;;trans.uk_UA = installer/resources/locale/po/messages_uk.po
trans.uk_UA = installer/resources/locale/po/messages_uk.po
trans.zh_CN = installer/resources/locale/po/messages_zh.po
[I2P.getopt]
@@ -305,6 +345,8 @@ trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
trans.fi = core/java/src/gnu/getopt/MessagesBundle_fi.properties
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
;; currently corrupt, non-UTF-8
;;trans.gl = core/java/src/gnu/getopt/MessagesBundle_gl.properties
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
;; Java converts id to in
trans.id = core/java/src/gnu/getopt/MessagesBundle_in.properties
@@ -323,6 +365,8 @@ trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
;; currently corrupt, non-UTF-8
;;trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
;; currently corrupt, non-UTF-8
;;trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
trans.uk_UA = core/java/src/gnu/getopt/MessagesBundle_uk.properties
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
@@ -330,20 +374,47 @@ trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
source_file = apps/ministreaming/locale/messages_en.po
source_lang = en
trans.ca = apps/ministreaming/locale/messages_ca.po
trans.cs = apps/ministreaming/locale/messages_cs.po
trans.de = apps/ministreaming/locale/messages_de.po
trans.es = apps/ministreaming/locale/messages_es.po
trans.fi = apps/ministreaming/locale/messages_fi.po
trans.fr = apps/ministreaming/locale/messages_fr.po
trans.gl = apps/ministreaming/locale/messages_gl.po
;; Java converts id to in
trans.id = apps/ministreaming/locale/messages_in.po
trans.it = apps/ministreaming/locale/messages_it.po
trans.ko = apps/ministreaming/locale/messages_ko.po
trans.nb = apps/ministreaming/locale/messages_nb.po
trans.nl = apps/ministreaming/locale/messages_nl.po
trans.pl = apps/ministreaming/locale/messages_pl.po
trans.pt = apps/ministreaming/locale/messages_pt.po
trans.pt_BR = apps/ministreaming/locale/messages_pt_BR.po
trans.ro = apps/ministreaming/locale/messages_ro.po
trans.ru_RU = apps/ministreaming/locale/messages_ru.po
trans.sv_SE = apps/ministreaming/locale/messages_sv.po
trans.tr_TR = apps/ministreaming/locale/messages_tr.po
trans.uk_UA = apps/ministreaming/locale/messages_uk.po
trans.zh_CN = apps/ministreaming/locale/messages_zh.po
[I2P.manpages]
type = PO
source_file = installer/resources/locale-man/man.pot
source_lang = en
; after adding languages here, add to debian/*.manpages also
trans.de = installer/resources/locale-man/man_de.po
trans.es = installer/resources/locale-man/man_es.po
trans.fi = installer/resources/locale-man/man_fi.po
trans.fr = installer/resources/locale-man/man_fr.po
trans.it = installer/resources/locale-man/man_it.po
trans.ko = installer/resources/locale-man/man_ko.po
trans.nl = installer/resources/locale-man/man_nl.po
trans.pl = installer/resources/locale-man/man_pl.po
trans.pt = installer/resources/locale-man/man_pt.po
trans.pt_BR = installer/resources/locale-man/man_pt_BR.po
trans.ru_RU = installer/resources/locale-man/man_ru.po
trans.sv_SE = installer/resources/locale-man/man_sv.po
trans.zh_CN = installer/resources/locale-man/man_zh.po
[main]
host = https://www.transifex.com

14
Docker.entrypoint.sh Normal file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
export JAVA_HOME=/opt/jdk/jre
# Ensure user rights
chown -R i2p:nobody /opt/i2p
chmod -R u+rwx /opt/i2p
gosu i2p /opt/i2p/i2psvc /opt/i2p/wrapper.config wrapper.pidfile=/var/tmp/i2p.pid \
wrapper.name=i2p \
wrapper.displayname="I2P Service" \
wrapper.statusfile=/var/tmp/i2p.status \
wrapper.java.statusfile=/var/tmp/i2p.java.status \
wrapper.logfile=/var/tmp/wrapper.log

7
Docker.expt Normal file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/expect
set timeout 15;
spawn java -jar /tmp/i2pinstall.jar -console
expect {
-re ".*press 1 to continue, 2 to quit, 3 to redisplay" {send "1\r"; exp_continue;}
-re "Select target path *" {send "/opt/i2p\r"; exp_continue;}
}

62
Dockerfile Normal file
View File

@@ -0,0 +1,62 @@
FROM meeh/java8server:latest
# Docker image based on Alpine with Java.
# We use Oracle Java to run I2P, but uses the openjdk to build it.
MAINTAINER Mikal Villa <mikal@sigterm.no>
ENV GIT_BRANCH="master"
ENV I2P_PREFIX="/opt/i2p"
ENV PATH=${I2P_PREFIX}/bin:$PATH
ENV JAVA_HOME=/usr/lib/jvm/default-jvm
ENV GOSU_VERSION=1.7
ENV GOSU_SHASUM="34049cfc713e8b74b90d6de49690fa601dc040021980812b2f1f691534be8a50 /usr/local/bin/gosu"
RUN mkdir /user && adduser -S -h /user i2p && chown -R i2p:nobody /user
# Adding files first, since Docker.expt is required for installation
ADD Docker.expt /tmp/Docker.expt
ADD Docker.entrypoint.sh /entrypoint.sh
# Required for wget https
RUN apk add --no-cache openssl
# Gosu is a replacement for su/sudo in docker and not a backdoor :) See https://github.com/tianon/gosu
RUN wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64 \
&& echo "${GOSU_SHASUM}" | sha256sum -c && chmod +x /usr/local/bin/gosu
#
# Each RUN is a layer, adding the dependencies and building i2pd in one layer takes around 8-900Mb, so to keep the
# image under 200mb we need to remove all the build dependencies in the same "RUN" / layer.
#
# The main layer
RUN apk --no-cache add build-base git gettext tar bzip2 apache-ant openjdk8 expect \
&& mkdir -p /usr/src/build \
&& cd /usr/src/build \
&& git clone -b ${GIT_BRANCH} https://github.com/i2p/i2p.i2p.git \
&& cd /usr/src/build/i2p.i2p \
&& echo "noExe=true" >> build.properties \
&& ant installer-linux \
&& cp i2pinstall*.jar /tmp/i2pinstall.jar \
&& mkdir -p /opt \
&& chown i2p:root /opt \
&& chmod u+rw /opt \
&& gosu i2p expect -f /tmp/Docker.expt \
&& cd ${I2P_PREFIX} \
&& rm -fr man docs *.bat *.command *.app /tmp/i2pinstall.jar /tmp/Docker.expt \
&& rm -fr /usr/src/build \
&& apk --purge del build-base apache-ant expect tcl expat git openjdk8 openjdk8-jre openjdk8-jre-base openjdk8-jre-lib bzip2 tar \
binutils-libs binutils pkgconfig libcurl libc-dev musl-dev g++ make fortify-headers pkgconf giflib libssh2 libxdmcp libxcb \
libx11 pcre alsa-lib libxi libxrender libxml2 readline bash openssl \
&& rm -fr /usr/lib/jvm/default-jre \
&& ln -sf /opt/jdk/jre /usr/lib/jvm/default-jre \
&& chmod a+x /entrypoint.sh
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445 15000-20000
ENTRYPOINT [ "/entrypoint.sh" ]

View File

@@ -11,7 +11,7 @@ you may use:
lynx http://localhost:7657/
to configure the router.
If you're having trouble, swing by http://forum.i2p/, check the
If you're having trouble, check the
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

View File

@@ -36,7 +36,7 @@ Public domain except as listed below:
Copyright (c) 2003, TheCrypto
See licenses/LICENSE-ElGamalDSA.txt
SHA256 and HMAC:
HMAC:
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
See licenses/LICENSE-SHA256.txt
@@ -58,13 +58,13 @@ Public domain except as listed below:
PRNG:
Copyright (C) 2001, 2002, Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
See licenses/LICENSE-LGPLv2.1.txt or /usr/share/common-licenses/LGPL-2.1
HashCash code:
Copyright 2006 Gregory Rubin grrubin@gmail.com
See licenses/LICENSE-HashCash.txt
GettextResource from gettext v0.18:
GettextResource from gettext v0.19.8:
Copyright (C) 2001, 2007 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
@@ -103,9 +103,14 @@ Public domain except as listed below:
http://creativecommons.org/licenses/by-sa/3.0/
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
GeoIP API 1.3.1:
See licenses/LICENSE-LGPLv2.1.txt
Installer:
Launch4j 3.0.1:
(Launch4j is only included in the upstream source package and Windows binaries.
Not applicable for non-Windows binaries or Debian/Launchpad packages.)
Copyright (c) 2004, 2008 Grzegorz Kowal
See licenses/LICENSE-Launch4j.txt (in binary packages)
See installer/lib/launch4j/LICENSE.txt (in source packages)
@@ -145,8 +150,8 @@ Installer:
Java Service Wrapper Community Edition 32-bit 3.5.25:
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
Java Service Wrapper Community Edition 32-bit 3.5.30:
Copyright (C) 1999-2016 Tanuki Software, Ltd. All Rights Reserved.
See licenses/LICENSE-Wrapper.txt
@@ -156,6 +161,8 @@ Jbigi Libraries (jbigi.jar):
GMP 4.3.2 / 5.0.2:
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv3.txt
GMP 6.0.0:
See licenses/LICENSE-GPLv2.txt
Applications:
@@ -168,6 +175,10 @@ Applications:
Copyright (C) sponge
See licenses/COPYING-BOB.txt
Desktopgui
Copyright (c) Mathias De Maré
See licenses/LICENSE-DesktopGUI.txt
I2PSnark:
Copyright (C) 2003 Mark J. Wielaard
GPLv2 (or any later version)
@@ -198,18 +209,22 @@ Applications:
Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
Copyright (c) 2008 Alexander von Gernler. All rights reserved.
See licenses/LICENSE-BSD.txt
Zxing:
Zxing 3.3.0:
See licenses/LICENSE-Apache2.0.txt
Jetty 8.1.17.v20150415:
Jetty 9.2.21.v20170120:
See licenses/ABOUT-Jetty.html
See licenses/NOTICE-Jetty.html
See licenses/LICENSE-Apache2.0.txt
See licenses/LICENSE-ECLIPSE-1.0.html
See licenses/NOTICE-Commons-Logging.txt
JRobin 1.5.9.1:
JRobin 1.6.0-1:
Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
Copyright (c) 2011 The OpenNMS Group, Inc.
See licenses/LICENSE-LGPLv2.1.txt
DeallocationHelper:
Copyright (c) 2006-2016 Julien Gouesse
See licenses/LICENSE-GPLv2.txt
Ministreaming Lib:
By mihi.
@@ -229,6 +244,7 @@ Applications:
- All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/
Silk icons: See licenses/LICENSE-SilkIcons.txt
FatCow icons: See licenses/LICENSE-FatCowIcons.txt
Fugue Icons: See licenses/LICENSE-FugueIcons.txt
GeoIP Data:
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
@@ -267,8 +283,8 @@ Applications:
Bundles systray4j-2.4.1:
See licenses/LICENSE-LGPLv2.1.txt
Tomcat 6.0.44:
Copyright 1999-2015 The Apache Software Foundation
Tomcat 8.0.33:
Copyright 1999-2016 The Apache Software Foundation
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Tomcat.txt
@@ -286,10 +302,6 @@ distributions. See the source package for the additional license information.
Copyright (C) sponge
DWTFYWTPL
Desktopgui
Copyright (c) Mathias De Maré
See apps/desktopgui/LICENSE
SAM C Library:
Copyright (c) 2004, Matthew P. Cashdollar <mpc@innographx.com>
See apps/sam/c/doc/license.txt

62
README.md Normal file
View File

@@ -0,0 +1,62 @@
# I2P
This is the source code for the reference Java implementation of I2P.
Latest release: https://geti2p.net/download
## Installing
See INSTALL.txt or https://geti2p.net/download for installation instructions.
## Documentation
https://geti2p.net/how
FAQ: https://geti2p.net/faq
API: http://docs.i2p-projekt.de/javadoc/
or run 'ant javadoc' then start at build/javadoc/index.html
## Building packages from source
To get development branch from source control: https://geti2p.net/newdevelopers
### Prerequisites
- Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
- Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
- Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel)
require only Java 1.6
- Apache Ant 1.7.0 or higher
- The xgettext, msgfmt, and msgmerge tools installed from the GNU gettext package
http://www.gnu.org/software/gettext/
- Build environment must use a UTF-8 locale.
### Build process
On x86 systems do:
ant pkg
On non-x86, use one of the following instead:
ant installer-linux
ant installer-freebsd
ant installer-osx
Run 'ant' with no arguments to see other build options.
## Contact info
Need help? See the IRC channel #i2p on irc.freenode.net
Bug reports: https://trac.i2p2.de/report/1
Contact information, security issues, press inquiries: https://geti2p.net/en/contact
Twitter: @i2p, @geti2p
## Licenses
See LICENSE.txt

View File

@@ -35,7 +35,6 @@ FAQ:
Need help?
IRC irc.freenode.net #i2p
http://forum.i2p/
Bug reports:
https://trac.i2p2.de/report/1

View File

@@ -49,7 +49,7 @@ config /etc/rc.d/rc.i2p.new
config $INST_DIR/wrapper.config.new
if [ -e /var/log/packages/i2p-base* ]; then
echo "Warning: This package supercedes the 'i2p-base' package." >&2
echo "Warning: This package supersedes 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

13
apps/BOB/BOB.iml Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core" />
<orderEntry type="module" module-name="ministreaming" />
</component>
</module>

View File

@@ -48,8 +48,9 @@ javac.classpath=\
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.source=1.5
javac.target=1.5
javac.version=1.7
javac.source=${javac.version}
javac.target=${javac.version}
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}:\

View File

@@ -155,7 +155,6 @@ public class BOB implements Runnable, ClientApp {
*
* @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) {
@@ -165,7 +164,7 @@ public class BOB implements Runnable, ClientApp {
if (classResource != null) {
String classPath = classResource.toString();
if (classPath.startsWith("jar")) {
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
String manifestPath = classPath.substring(0, classPath.lastIndexOf('!') + 1) +
"/META-INF/MANIFEST.MF";
try {
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
@@ -364,25 +363,30 @@ public class BOB implements Runnable, ClientApp {
// We could order them to stop, but that could cause nasty issues in the locks.
visitAllThreads();
database.getReadLock();
int all = database.getcount();
database.releaseReadLock();
NamedDB nickinfo;
for (i = 0; i < all; i++) {
database.getReadLock();
nickinfo = (NamedDB) database.getnext(i);
nickinfo.getReadLock();
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
nickinfo.releaseReadLock();
database.releaseReadLock();
database.getWriteLock();
nickinfo.getWriteLock();
nickinfo.add(P_STOPPING, Boolean.valueOf(true));
nickinfo.releaseWriteLock();
database.releaseWriteLock();
} else {
nickinfo.releaseReadLock();
database.releaseReadLock();
try {
for (Object ndb : database.values()) {
nickinfo = (NamedDB) ndb;
nickinfo.getReadLock();
boolean released = false;
try {
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
nickinfo.releaseReadLock();
released = true;
nickinfo.getWriteLock();
try {
nickinfo.add(P_STOPPING, Boolean.TRUE);
} finally {
nickinfo.releaseWriteLock();
}
}
} finally {
if (!released)
nickinfo.releaseReadLock();
}
}
} finally {
database.releaseReadLock();
}
changeState(STOPPED);
_log.info("BOB is now stopped.");

File diff suppressed because it is too large Load Diff

View File

@@ -25,16 +25,16 @@ import net.i2p.data.DataHelper;
import net.i2p.util.I2PAppThread;
/**
* Process I2P->TCP
* Process I2P-&gt;TCP
*
* @author sponge
*/
public class I2PtoTCP implements Runnable {
private I2PSocket I2P;
private NamedDB info, database;
private final NamedDB info, database;
private Socket sock;
private AtomicBoolean lives;
private final AtomicBoolean lives;
/**
* Constructor
@@ -56,8 +56,8 @@ public class I2PtoTCP implements Runnable {
}
private void runlock() {
database.releaseReadLock();
info.releaseReadLock();
database.releaseReadLock();
}
/**
@@ -78,23 +78,15 @@ public class I2PtoTCP implements Runnable {
die:
{
try {
try {
rlock();
} catch (Exception e) {
break die;
}
rlock();
try {
host = info.get("OUTHOST").toString();
port = Integer.parseInt(info.get("OUTPORT").toString());
tell = info.get("QUIET").equals(Boolean.FALSE);
} catch (Exception e) {
runlock();
break die;
}
try {
} finally {
runlock();
} catch (Exception e) {
break die;
}
sock = new Socket(host, port);
sock.setKeepAlive(true);

View File

@@ -38,18 +38,18 @@ import net.i2p.util.Log;
*/
public class MUXlisten implements Runnable {
private NamedDB database, info;
private Logger _log;
private I2PSocketManager socketManager;
private ByteArrayInputStream prikey;
private final NamedDB database, info;
private final Logger _log;
private final I2PSocketManager socketManager;
private final ByteArrayInputStream prikey;
private ThreadGroup tg;
private String N;
private ServerSocket listener = null;
private int backlog = 50; // should this be more? less?
boolean go_out;
boolean come_in;
private AtomicBoolean lock;
private AtomicBoolean lives;
private final String N;
private ServerSocket listener;
private final int backlog = 50; // should this be more? less?
private final boolean go_out;
private final boolean come_in;
private final AtomicBoolean lock;
private final AtomicBoolean lives;
/**
* Constructor Will fail if INPORT is occupied.
@@ -61,43 +61,39 @@ public class MUXlisten implements Runnable {
* @throws java.io.IOException
*/
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
int port = 0;
InetAddress host = null;
this.lock = lock;
this.tg = null;
this.database = database;
this.info = info;
this._log = _log;
lives = new AtomicBoolean(false);
try {
int port = 0;
InetAddress host = null;
this.lock = lock;
this.tg = null;
this.database = database;
this.info = info;
this._log = _log;
lives = new AtomicBoolean(false);
this.database.getWriteLock();
this.info.getWriteLock();
this.info.add("STARTING", Boolean.valueOf(true));
this.info.releaseWriteLock();
this.database.releaseWriteLock();
this.database.getReadLock();
this.info.getReadLock();
N = this.info.get("NICKNAME").toString();
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
// Make a new copy so that anything else won't muck with our database.
Properties R = (Properties) info.get("PROPERTIES");
Properties Q = new Properties();
Lifted.copyProperties(R, Q);
this.database.releaseReadLock();
this.info.releaseReadLock();
this.database.getReadLock();
this.info.getReadLock();
this.go_out = info.exists("OUTPORT");
this.come_in = info.exists("INPORT");
if (this.come_in) {
port = Integer.parseInt(info.get("INPORT").toString());
host = InetAddress.getByName(info.get("INHOST").toString());
wlock();
try {
this.info.add("STARTING", Boolean.TRUE);
} finally {
wunlock();
}
Properties Q = new Properties();
rlock();
try {
N = this.info.get("NICKNAME").toString();
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
// Make a new copy so that anything else won't muck with our database.
Properties R = (Properties) info.get("PROPERTIES");
Lifted.copyProperties(R, Q);
this.go_out = info.exists("OUTPORT");
this.come_in = info.exists("INPORT");
if (this.come_in) {
port = Integer.parseInt(info.get("INPORT").toString());
host = InetAddress.getByName(info.get("INHOST").toString());
}
} finally {
runlock();
}
this.database.releaseReadLock();
this.info.releaseReadLock();
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
int i2cpPort = 7654;
@@ -115,48 +111,51 @@ public class MUXlisten implements Runnable {
prikey, i2cpHost, i2cpPort, Q);
} catch (IOException e) {
// Something went bad.
this.database.getWriteLock();
this.info.getWriteLock();
this.info.add("STARTING", Boolean.valueOf(false));
this.info.releaseWriteLock();
this.database.releaseWriteLock();
throw new IOException(e.toString());
wlock();
try {
this.info.add("STARTING", Boolean.FALSE);
} finally {
wunlock();
}
throw e;
} catch (RuntimeException e) {
// Something went bad.
this.database.getWriteLock();
this.info.getWriteLock();
this.info.add("STARTING", Boolean.valueOf(false));
this.info.releaseWriteLock();
this.database.releaseWriteLock();
throw new RuntimeException(e);
wlock();
try {
this.info.add("STARTING", Boolean.FALSE);
} finally {
wunlock();
}
throw e;
} catch (Exception e) {
// Something else went bad.
this.database.getWriteLock();
this.info.getWriteLock();
this.info.add("STARTING", Boolean.valueOf(false));
this.info.releaseWriteLock();
this.database.releaseWriteLock();
wlock();
try {
this.info.add("STARTING", Boolean.FALSE);
} finally {
wunlock();
}
e.printStackTrace();
throw new RuntimeException(e);
}
}
private void rlock() throws Exception {
private void rlock() {
database.getReadLock();
info.getReadLock();
}
private void runlock() throws Exception {
database.releaseReadLock();
private void runlock() {
info.releaseReadLock();
database.releaseReadLock();
}
private void wlock() throws Exception {
private void wlock() {
database.getWriteLock();
info.getWriteLock();
}
private void wunlock() throws Exception {
private void wunlock() {
info.releaseWriteLock();
database.releaseWriteLock();
}
@@ -170,24 +169,19 @@ public class MUXlisten implements Runnable {
Thread t = null;
Thread q = null;
try {
wlock();
try {
wlock();
try {
info.add("RUNNING", Boolean.valueOf(true));
info.add("RUNNING", Boolean.TRUE);
} catch (Exception e) {
lock.set(false);
wunlock();
return;
}
} catch (Exception e) {
lock.set(false);
return;
}
try {
} finally {
wunlock();
} catch (Exception e) {
lock.set(false);
return;
}
lives.set(true);
lock.set(false);
@@ -214,21 +208,17 @@ public class MUXlisten implements Runnable {
q.start();
}
wlock();
try {
wlock();
try {
info.add("STARTING", Boolean.valueOf(false));
info.add("STARTING", Boolean.FALSE);
} catch (Exception e) {
wunlock();
break quit;
}
} catch (Exception e) {
break quit;
}
try {
} finally {
wunlock();
} catch (Exception e) {
break quit;
}
boolean spin = true;
while (spin && lives.get()) {
@@ -237,21 +227,17 @@ public class MUXlisten implements Runnable {
} catch (InterruptedException e) {
break quit;
}
rlock();
try {
rlock();
try {
spin = info.get("STOPPING").equals(Boolean.FALSE);
} catch (Exception e) {
runlock();
break quit;
}
} catch (Exception e) {
break quit;
}
try {
} finally {
runlock();
} catch (Exception e) {
break quit;
}
}
} // die
@@ -271,16 +257,16 @@ public class MUXlisten implements Runnable {
try {
wlock();
try {
info.add("STARTING", Boolean.valueOf(false));
info.add("STOPPING", Boolean.valueOf(true));
info.add("RUNNING", Boolean.valueOf(false));
info.add("STARTING", Boolean.FALSE);
info.add("STOPPING", Boolean.TRUE);
info.add("RUNNING", Boolean.FALSE);
} catch (Exception e) {
lock.set(false);
wunlock();
return;
}
wunlock();
} catch (Exception e) {
} finally {
wunlock();
}
// Start cleanup.
while (!lock.compareAndSet(false, true)) {
@@ -322,15 +308,15 @@ public class MUXlisten implements Runnable {
try {
wlock();
try {
info.add("STARTING", Boolean.valueOf(false));
info.add("STOPPING", Boolean.valueOf(false));
info.add("RUNNING", Boolean.valueOf(false));
info.add("STARTING", Boolean.FALSE);
info.add("STOPPING", Boolean.FALSE);
info.add("RUNNING", Boolean.FALSE);
} catch (Exception e) {
lock.set(false);
wunlock();
return;
}
wunlock();
} finally {
wunlock();
}
} catch (Exception e) {
}

View File

@@ -15,6 +15,12 @@
*/
package net.i2p.BOB;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Internal database to relate nicknames to options to values
*
@@ -22,129 +28,62 @@ package net.i2p.BOB;
*/
public class NamedDB {
private volatile Object[][] data;
private int index, writersWaiting, readers;
private final Map<String, Object> data;
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(false);
/**
* make initial NULL object
*
*/
public NamedDB() {
this.data = new Object[1][2];
this.data = new HashMap<String, Object>();
}
synchronized public void getReadLock() {
while ((writersWaiting != 0)) {
try {
wait();
} catch (InterruptedException ie) {
}
}
readers++;
public void getReadLock() {
lock.readLock().lock();
}
synchronized public void releaseReadLock() {
readers--;
notifyAll();
public void releaseReadLock() {
lock.readLock().unlock();
}
synchronized public void getWriteLock() {
writersWaiting++;
while (readers != 0 && writersWaiting != 1) {
try {
wait();
} catch (InterruptedException ie) {
}
}
public void getWriteLock() {
lock.writeLock().lock();
}
synchronized public void releaseWriteLock() {
writersWaiting--;
notifyAll();
public void releaseWriteLock() {
lock.writeLock().unlock();
}
/**
* Find objects in the array, returns its index or throws exception
* @param key
* @return an objects index
* @throws ArrayIndexOutOfBoundsException when key does not exist
*/
public int idx(Object key) throws ArrayIndexOutOfBoundsException {
for (int i = 0; i < index; i++) {
if (key.equals(data[i][0])) {
return i;
}
}
throw new ArrayIndexOutOfBoundsException("Can't locate key for index");
}
/**
* Delete an object from array if it exists
* Delete an object if it exists
*
* @param key
*/
public void kill(Object key) {
int i, j, k, l;
Object[][] olddata;
int didsomething = 0;
try {
k = idx(key);
} catch (ArrayIndexOutOfBoundsException b) {
return;
}
olddata = new Object[index + 2][2];
// copy to olddata, skipping 'k'
for (i = 0, l = 0; l < index; i++, l++) {
if (i == k) {
l++;
didsomething++;
}
for (j = 0; j < 2; j++) {
olddata[i][j] = data[l][j];
}
}
index -= didsomething;
data = olddata;
public void kill(String key) {
data.remove(key);
}
/**
* Add object to the array, deletes the old one if it exists
* Add object, deletes the old one if it exists
*
* @param key
* @param val
*/
public void add(Object key, Object val) {
Object[][] olddata;
int i, j;
i = 0;
kill(key);
olddata = new Object[index + 2][2];
// copy to olddata
for (i = 0; i < index; i++) {
for (j = 0; j < 2; j++) {
olddata[i][j] = data[i][j];
}
}
data = olddata;
data[index++] = new Object[]{key, val};
public void add(String key, Object val) {
data.put(key, val);
}
/**
* Get the object, and return it, throws RuntimeException
* Get the object, and return it, throws RuntimeException if not found
*
* @param key
* @return Object
* @throws java.lang.RuntimeException
* @param key non-null
* @return Object non-null
* @throws java.lang.RuntimeException if not found
*/
public Object get(Object key) throws RuntimeException {
for (int i = 0; i < index; i++) {
if (key.equals(data[i][0])) {
return data[i][1];
}
}
public Object get(String key) throws RuntimeException {
Object rv = data.get(key);
if (rv != null)
return rv;
throw new RuntimeException("Key not found");
}
@@ -154,33 +93,14 @@ public class NamedDB {
* @param key
* @return true if an object exists, else returns false
*/
public boolean exists(Object key) {
for (int i = 0; i < index; i++) {
if (key.equals(data[i][0])) {
return true;
}
}
return false;
public boolean exists(String key) {
return data.containsKey(key);
}
/**
*
* @param i index
* @return an indexed Object
* @throws java.lang.RuntimeException
* @since 0.9.29 replaces getcount() and getnext(int)
*/
public Object getnext(int i) throws RuntimeException {
if (i < index && i > -1) {
return data[i][1];
}
throw new RuntimeException("No more data");
}
/**
* @return the count of how many objects
*/
public int getcount() {
return index;
public Collection<Object> values() {
return data.values();
}
}

View File

@@ -27,9 +27,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/
public class TCPio implements Runnable {
private InputStream Ain;
private OutputStream Aout;
private AtomicBoolean lives;
private final InputStream Ain;
private final OutputStream Aout;
private final AtomicBoolean lives;
/**
* Constructor

View File

@@ -35,29 +35,26 @@ import net.i2p.util.I2PAppThread;
/**
*
* Process TCP->I2P
* Process TCP-&gt;I2P
*
* @author sponge
*/
public class TCPtoI2P implements Runnable {
private I2PSocket I2P;
private NamedDB info, database;
private Socket sock;
private I2PSocketManager socketManager;
private AtomicBoolean lives;
private final Socket sock;
private final I2PSocketManager socketManager;
private final AtomicBoolean lives;
/**
* Constructor
* @param i2p
* @param socket
* param info
* param database
* @param info unused
* @param database unused
*/
TCPtoI2P(I2PSocketManager i2p, Socket socket, NamedDB info, NamedDB database, AtomicBoolean lives) {
this.sock = socket;
this.info = info;
this.database = database;
this.socketManager = i2p;
this.lives = lives;
}
@@ -106,16 +103,6 @@ public class TCPtoI2P implements Runnable {
out.flush();
}
private void rlock() {
database.getReadLock();
info.getReadLock();
}
private void runlock() {
info.releaseReadLock();
database.releaseReadLock();
}
/**
* TCP stream to I2P stream thread starter
*

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$" relative="/WEB-INF" />
</webroots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="jettylib" level="project" />
<orderEntry type="module" module-name="core" />
</component>
</module>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<project name="addressbook" default="war" basedir=".">
<project name="addressbook" default="all" basedir=".">
<property name="src" value="java/src"/>
<property name="build" value="build"/>
@@ -7,7 +7,9 @@
<property name="jar" value="addressbook.jar"/>
<property name="war" value="addressbook.war"/>
<property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.6" />
<property name="javac.version" value="1.7" />
<target name="all" depends="jar, emptyWar"/>
<target name="init">
<mkdir dir="${build}"/>
@@ -36,24 +38,10 @@
</depend>
</target>
<target name="dependServlet" 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" />
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
</classpath>
</depend>
</target>
<target name="compile" depends="init, depend">
<target name="compile" depends="init, depend, warUpToDate">
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${src}" destdir="${build}"
excludes="net/i2p/addressbook/Servlet.java">
srcdir="${src}" destdir="${build}">
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
@@ -61,55 +49,30 @@
</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" />
<pathelement location="../jetty/jettylib/javax.servlet.jar" />
</classpath>
</javac>
</target>
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
<target name="jar" depends="compile, changes">
<!-- set if unset -->
<property name="workspace.changes" value="" />
<property name="workspace.changes.tr" value="" />
<jar basedir="${build}" destfile="${dist}/${jar}">
<manifest>
<attribute name="Main-Class" value="addressbook.Daemon"/>
<attribute name="Implementation-Version" value="${full.version}" />
<attribute name="Built-By" value="${build.built-by}" />
<attribute name="Build-Date" value="${build.timestamp}" />
<attribute name="Base-Revision" value="${workspace.version}" />
<attribute name="Workspace-Changes" value="${workspace.changes}" />
</manifest>
</jar>
</target>
<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"/>
<copy todir="${dist}/tmp/WEB-INF/classes">
<fileset dir="${build}"/>
</copy>
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<war basedir="${dist}/tmp" webxml="web.xml" destfile="${dist}/${war}">
<manifest>
<attribute name="Main-Class" value="net.i2p.addressbook.Daemon"/>
<attribute name="Implementation-Version" value="${full.version}" />
<attribute name="Built-By" value="${build.built-by}" />
<attribute name="Build-Date" value="${build.timestamp}" />
<attribute name="Base-Revision" value="${workspace.version}" />
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
</manifest>
</war>
<delete dir="${dist}/tmp"/>
</jar>
</target>
<target name="emptyWar" depends="init">
<jar destfile="${dist}/${war}" >
<manifest>
<attribute name="Note" value="Intentionally empty" />
</manifest>
</jar>
</target>
<target name="warUpToDate">
<uptodate property="war.uptodate" targetfile="${dist}/${war}">

View File

@@ -30,6 +30,7 @@ import java.util.Map;
import java.util.regex.Pattern;
import net.i2p.I2PAppContext;
import net.i2p.client.naming.HostTxtEntry;
import net.i2p.util.EepGet;
import net.i2p.util.SecureFile;
@@ -38,14 +39,16 @@ import net.i2p.util.SecureFile;
* destinations. AddressBooks can be created from local and remote files, merged
* together, and written out to local files.
*
* Methods are NOT thread-safe.
*
* @author Ragnarok
*
*/
class AddressBook {
class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
private final String location;
/** either addresses or subFile will be non-null, but not both */
private final Map<String, String> addresses;
private final Map<String, HostTxtEntry> addresses;
private final File subFile;
private boolean modified;
private static final boolean DEBUG = false;
@@ -77,7 +80,7 @@ class AddressBook {
* A Map containing human readable addresses as keys, mapped to
* base64 i2p destinations.
*/
public AddressBook(Map<String, String> addresses) {
public AddressBook(Map<String, HostTxtEntry> addresses) {
this.addresses = addresses;
this.subFile = null;
this.location = null;
@@ -107,7 +110,7 @@ class AddressBook {
new File("addressbook.tmp").delete();
}
*/
static final long MAX_SUB_SIZE = 3 * 1024 * 1024l; //about 5,000 hosts
static final long MAX_SUB_SIZE = 5 * 1024 * 1024l; //about 8,000 hosts
/**
* Construct an AddressBook from the Subscription subscription. If the
@@ -128,7 +131,7 @@ class AddressBook {
* @param proxyPort port number of proxy
*/
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
Map<String, String> a = null;
Map<String, HostTxtEntry> a = null;
File subf = null;
try {
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
@@ -165,28 +168,40 @@ class AddressBook {
*/
public AddressBook(File file) {
this.location = file.toString();
Map<String, String> a;
Map<String, HostTxtEntry> a;
try {
a = ConfigParser.parse(file);
a = HostTxtParser.parse(file);
} catch (IOException exp) {
a = new HashMap<String, String>();
a = new HashMap<String, HostTxtEntry>();
}
this.addresses = a;
this.subFile = null;
}
/**
* Test only.
*
* @param testsubfile path to a file containing the simulated fetch of a subscription
* @since 0.9.26
*/
public AddressBook(String testsubfile) {
this.location = testsubfile;
this.addresses = null;
this.subFile = new File(testsubfile);
}
/**
* Return an iterator over the addresses in the AddressBook.
* @since 0.8.7
*/
public Iterator<Map.Entry<String, String>> iterator() {
public Iterator<Map.Entry<String, HostTxtEntry>> iterator() {
if (this.subFile != null) {
try {
return new ConfigIterator(this.subFile);
return new HostTxtIterator(this.subFile);
} catch (IOException ioe) {
return new ConfigIterator();
return new HostTxtIterator();
}
}
}
return this.addresses.entrySet().iterator();
}
@@ -229,7 +244,7 @@ class AddressBook {
/**
* Do basic validation of the hostname
* hostname was already converted to lower case by ConfigParser.parse()
* hostname was already converted to lower case by HostTxtParser.parse()
*/
public static boolean isValidKey(String host) {
return
@@ -291,15 +306,15 @@ class AddressBook {
public void merge(AddressBook other, boolean overwrite, Log log) {
if (this.addresses == null)
throw new IllegalStateException();
for (Iterator<Map.Entry<String, String>> iter = other.iterator(); iter.hasNext(); ) {
Map.Entry<String, String> entry = iter.next();
for (Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator(); iter.hasNext(); ) {
Map.Entry<String, HostTxtEntry> entry = iter.next();
String otherKey = entry.getKey();
String otherValue = entry.getValue();
HostTxtEntry otherValue = entry.getValue();
if (isValidKey(otherKey) && isValidDest(otherValue)) {
if (isValidKey(otherKey) && isValidDest(otherValue.getDest())) {
if (this.addresses.containsKey(otherKey) && !overwrite) {
if (DEBUG && log != null &&
!this.addresses.get(otherKey).equals(otherValue)) {
!this.addresses.get(otherKey).equals(otherValue.getDest())) {
log.append("Conflict for " + otherKey + " from "
+ other.location
+ ". Destination in remote address book is "
@@ -332,7 +347,7 @@ class AddressBook {
throw new IllegalStateException();
if (this.modified) {
try {
ConfigParser.write(this.addresses, file);
HostTxtParser.write(this.addresses, file);
} catch (IOException exp) {
System.err.println("Error writing addressbook " + file.getAbsolutePath() + " : " + exp.toString());
}

View File

@@ -29,8 +29,8 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -44,8 +44,7 @@ import net.i2p.util.SystemVersion;
* Utility class providing methods to parse and write files in config file
* format, and subscription file format.
*
* TODO: Change file encoding from default to UTF-8?
* Or switch to the DataHelper loadProps/storeProps methods?
* TODO: switch to the DataHelper loadProps/storeProps methods?
*
* @author Ragnarok
*/
@@ -88,20 +87,23 @@ class ConfigParser {
* if the BufferedReader cannot be read.
*
*/
public static Map<String, String> parse(BufferedReader input) throws IOException {
Map<String, String> result = new HashMap<String, String>();
String inputLine;
inputLine = input.readLine();
while (inputLine != null) {
inputLine = stripComments(inputLine);
String[] splitLine = DataHelper.split(inputLine, "=");
if (splitLine.length == 2) {
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
private static Map<String, String> parse(BufferedReader input) throws IOException {
try {
Map<String, String> result = new HashMap<String, String>();
String inputLine;
while ((inputLine = input.readLine()) != null) {
inputLine = stripComments(inputLine);
if (inputLine.length() == 0)
continue;
String[] splitLine = DataHelper.split(inputLine, "=", 2);
if (splitLine.length == 2) {
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
}
}
inputLine = input.readLine();
return result;
} finally {
try { input.close(); } catch (IOException ioe) {}
}
input.close();
return result;
}
/**
@@ -114,15 +116,21 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static Map<String, String> parse(File file) throws IOException {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream, "UTF-8"));
Map<String, String> rv = parse(input);
public static Map<String, String> parse(File file) throws IOException {
FileInputStream fileStream = null;
try {
fileStream.close();
} catch (IOException ioe) {}
return rv;
fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream, "UTF-8"));
Map<String, String> rv = parse(input);
return rv;
} finally {
if (fileStream != null) {
try {
fileStream.close();
} catch (IOException ioe) {}
}
}
}
/**
@@ -135,11 +143,13 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static Map<String, String> parse(String string) throws IOException {
/****
public static Map<String, String> parse(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return parse(input);
}
****/
/**
* Return a Map using the contents of the File file. If file cannot be read,
@@ -152,8 +162,8 @@ class ConfigParser {
* @return A Map containing the key, value pairs from file, or if file
* cannot be read, map.
*/
public static Map<String, String> parse(File file, Map<String, String> map) {
Map<String, String> result;
public static Map<String, String> parse(File file, Map<String, String> map) {
Map<String, String> result;
try {
result = parse(file);
for (Map.Entry<String, String> entry : map.entrySet()) {
@@ -179,19 +189,21 @@ class ConfigParser {
* @throws IOException
* if input cannot be read.
*/
public static List<String> parseSubscriptions(BufferedReader input)
private static List<String> parseSubscriptions(BufferedReader input)
throws IOException {
List<String> result = new LinkedList<String>();
String inputLine = input.readLine();
while (inputLine != null) {
inputLine = stripComments(inputLine).trim();
if (inputLine.length() > 0) {
result.add(inputLine);
try {
List<String> result = new ArrayList<String>(4);
String inputLine;
while ((inputLine = input.readLine()) != null) {
inputLine = stripComments(inputLine).trim();
if (inputLine.length() > 0) {
result.add(inputLine);
}
}
inputLine = input.readLine();
return result;
} finally {
try { input.close(); } catch (IOException ioe) {}
}
input.close();
return result;
}
/**
@@ -203,15 +215,21 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static List<String> parseSubscriptions(File file) throws IOException {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream, "UTF-8"));
List<String> rv = parseSubscriptions(input);
private static List<String> parseSubscriptions(File file) throws IOException {
FileInputStream fileStream = null;
try {
fileStream.close();
} catch (IOException ioe) {}
return rv;
fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream, "UTF-8"));
List<String> rv = parseSubscriptions(input);
return rv;
} finally {
if (fileStream != null) {
try {
fileStream.close();
} catch (IOException ioe) {}
}
}
}
/**
@@ -223,11 +241,13 @@ class ConfigParser {
* @throws IOException
* if string cannot be read.
*/
/****
public static List<String> parseSubscriptions(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return parseSubscriptions(input);
}
****/
/**
* Return a List using the contents of the File file. If file cannot be
@@ -277,12 +297,15 @@ class ConfigParser {
* @throws IOException
* if the BufferedWriter cannot be written to.
*/
public static void write(Map<String, String> map, BufferedWriter output) throws IOException {
for (Map.Entry<String, String> entry : map.entrySet()) {
output.write(entry.getKey() + '=' + entry.getValue());
output.newLine();
private static void write(Map<String, String> map, BufferedWriter output) throws IOException {
try {
for (Map.Entry<String, String> entry : map.entrySet()) {
output.write(entry.getKey() + '=' + entry.getValue());
output.newLine();
}
} finally {
try { output.close(); } catch (IOException ioe) {}
}
output.close();
}
/**
@@ -299,7 +322,7 @@ class ConfigParser {
* @throws IOException
* if file cannot be written to.
*/
public static void write(Map<String, String> map, File file) throws IOException {
public static void write(Map<String, String> map, File file) throws IOException {
boolean success = false;
if (!isWindows) {
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
@@ -327,13 +350,16 @@ class ConfigParser {
* @throws IOException
* if output cannot be written to.
*/
public static void writeSubscriptions(List<String> list, BufferedWriter output)
private static void writeSubscriptions(List<String> list, BufferedWriter output)
throws IOException {
for (String s : list) {
output.write(s);
output.newLine();
try {
for (String s : list) {
output.write(s);
output.newLine();
}
} finally {
try { output.close(); } catch (IOException ioe) {}
}
output.close();
}
/**
@@ -347,7 +373,7 @@ class ConfigParser {
* @throws IOException
* if output cannot be written to.
*/
public static void writeSubscriptions(List<String> list, File file)
private static void writeSubscriptions(List<String> list, File file)
throws IOException {
writeSubscriptions(list, new BufferedWriter(
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));

View File

@@ -23,36 +23,45 @@ package net.i2p.addressbook;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import net.i2p.I2PAppContext;
import net.i2p.client.naming.HostTxtEntry;
import net.i2p.client.naming.NamingService;
import net.i2p.client.naming.SingleFileNamingService;
import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
import net.i2p.util.OrderedProperties;
import net.i2p.util.SecureDirectory;
import net.i2p.util.SystemVersion;
/**
* Main class of addressbook. Performs updates, and runs the main loop.
* As of 0.9.30, package private, run with DaemonThread.
*
* @author Ragnarok
*
*/
public class Daemon {
class Daemon {
public static final String VERSION = "2.0.4";
private static final Daemon _instance = new Daemon();
private volatile boolean _running;
private static final boolean DEBUG = false;
// If you change this, change in SusiDNS SubscriptionBean also
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";
/** Any properties we receive from the subscription, we store to the
* addressbook with this prefix, so it knows it's part of the signature.
* This is also chosen so that it can't be spoofed.
*/
private static final String RCVD_PROP_PREFIX = "=";
private static final boolean MUST_VALIDATE = false;
/**
* Update the router and published address books using remote data from the
@@ -80,10 +89,9 @@ public class Daemon {
*/
public static void update(AddressBook master, AddressBook router,
File published, SubscriptionList subscriptions, Log log) {
Iterator<AddressBook> iter = subscriptions.iterator();
while (iter.hasNext()) {
for (AddressBook book : subscriptions) {
// yes, the EepGet fetch() is done in next()
router.merge(iter.next(), false, log);
router.merge(book, false, log);
}
router.write();
if (published != null) {
@@ -129,18 +137,22 @@ public class Daemon {
while (iter.hasNext()) {
// yes, the EepGet fetch() is done in next()
long start = System.currentTimeMillis();
AddressBook sub = iter.next();
long end = System.currentTimeMillis();
AddressBook addressbook = iter.next();
// SubscriptionIterator puts in a dummy AddressBook with no location if no fetch is done
if (DEBUG && log != null && sub.getLocation() != null)
log.append("Fetch of " + sub.getLocation() + " took " + (end - start));
start = end;
if (DEBUG && log != null && addressbook.getLocation() != null) {
long end = System.currentTimeMillis();
log.append("Fetch of " + addressbook.getLocation() + " took " + (end - start));
start = end;
}
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
for (Iterator<Map.Entry<String, String>> eIter = sub.iterator(); eIter.hasNext(); ) {
Map.Entry<String, String> entry = eIter.next();
int deleted = 0;
for (Map.Entry<String, HostTxtEntry> entry : addressbook) {
total++;
// may be null for 'remove' entries
String key = entry.getKey();
boolean isKnown;
Destination oldDest = null;
// NOT set for text file NamingService
Destination oldDest;
if (isTextFile) {
if (knownNames == null) {
// load the hostname set
@@ -148,22 +160,305 @@ public class Daemon {
opts.setProperty("file", "hosts.txt");
knownNames = router.getNames(opts);
}
isKnown = knownNames.contains(key);
oldDest = null;
isKnown = key != null ? knownNames.contains(key) : null;
} else {
oldDest = router.lookup(key);
oldDest = key != null ? router.lookup(key) : null;
isKnown = oldDest != null;
}
try {
if (!isKnown) {
if (AddressBook.isValidKey(key)) {
Destination dest = new Destination(entry.getValue());
Properties props = new Properties();
props.setProperty("s", sub.getLocation());
HostTxtEntry he = entry.getValue();
Properties hprops = he.getProps();
boolean mustValidate = MUST_VALIDATE || hprops != null;
String action = hprops != null ? hprops.getProperty(HostTxtEntry.PROP_ACTION) : null;
if (key == null && !he.hasValidRemoveSig()) {
if (log != null) {
log.append("Bad signature of action " + action + " for key " +
hprops.getProperty(HostTxtEntry.PROP_NAME) +
". From: " + addressbook.getLocation());
}
invalid++;
} else if (key != null && mustValidate && !he.hasValidSig()) {
if (log != null) {
log.append("Bad signature of action " + action + " for key " + key +
". From: " + addressbook.getLocation());
}
invalid++;
} else if (action != null || !isKnown) {
if (key != null && AddressBook.isValidKey(key)) {
Destination dest = new Destination(he.getDest());
Properties props = new OrderedProperties();
props.setProperty("s", addressbook.getLocation());
boolean allowExistingKeyInPublished = false;
if (mustValidate) {
// sig checked above
props.setProperty("v", "true");
}
if (hprops != null) {
// merge in all the received properties
for (Map.Entry<Object, Object> e : hprops.entrySet()) {
// Add prefix to indicate received property
props.setProperty(RCVD_PROP_PREFIX + e.getKey(), (String) e.getValue());
}
}
if (action != null) {
// Process commands. hprops is non-null.
// Must handle isKnown in each case.
if (action.equals(HostTxtEntry.ACTION_ADDDEST)) {
// Add an alternate destination (new crypto) for existing hostname
// Requires new NamingService support if the key exists
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
if (polddest != null) {
Destination pod = new Destination(polddest);
List<Destination> pod2 = router.lookupAll(key);
if (pod2 == null) {
// we didn't know it before, so we'll add it
// check inner sig anyway
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
} else if (pod2.contains(dest)) {
// we knew it before, with the same dest
old++;
continue;
} else if (pod2.contains(pod)) {
// checks out, so verify the inner sig
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
// TODO Requires NamingService support
// if (isTextFile), do we replace or not? check sigType.isAvailable()
boolean success = router.addDestination(key, dest, props);
if (log != null) {
if (success)
log.append("Additional address for " + key +
" added to address book. From: " + addressbook.getLocation());
else
log.append("Failed to add additional address for " + key +
" From: " + addressbook.getLocation());
}
// now update the published addressbook
// ditto
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
// FIXME this fails, no support in SFNS
success = publishedNS.addDestination(key, dest, props);
if (log != null && !success)
log.append("Add to published address book " + published.getAbsolutePath() + " failed for " + key);
}
nnew++;
continue;
} else {
// mismatch, disallow
logMismatch(log, action, key, pod2, he.getDest(), addressbook);
invalid++;
continue;
}
} else {
logMissing(log, action, key, addressbook);
invalid++;
continue;
}
} else if (action.equals(HostTxtEntry.ACTION_ADDNAME)) {
// Add an alias for an existing hostname, same dest
if (isKnown) {
// could be same or different dest
old++;
continue;
}
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
if (poldname != null) {
List<Destination> pod = router.lookupAll(poldname);
if (pod == null) {
// we didn't have the old one, so we'll add the new one
} else if (pod.contains(dest)) {
// checks out, so we'll add the new one
} else {
// mismatch, disallow
logMismatch(log, action, key, pod, he.getDest(), addressbook);
invalid++;
continue;
}
} else {
logMissing(log, action, key, addressbook);
invalid++;
continue;
}
} else if (action.equals(HostTxtEntry.ACTION_ADDSUBDOMAIN)) {
// add a subdomain with verification
if (isKnown) {
old++;
continue;
}
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
if (polddest != null && poldname != null) {
// check for valid subdomain
if (!AddressBook.isValidKey(poldname) ||
key.indexOf('.' + poldname) <= 0) {
if (log != null)
log.append("Action: " + action + " failed because" +
" old name " + poldname +
" is invalid" +
". From: " + addressbook.getLocation());
invalid++;
continue;
}
Destination pod = new Destination(polddest);
List<Destination> pod2 = router.lookupAll(poldname);
if (pod2 == null) {
// we didn't have the old name
// check inner sig anyway
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
} else if (pod2.contains(pod)) {
// checks out, so verify the inner sig
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
} else {
// mismatch, disallow
logMismatch(log, action, key, pod2, polddest, addressbook);
invalid++;
continue;
}
} else {
logMissing(log, action, key, addressbook);
invalid++;
continue;
}
} else if (action.equals(HostTxtEntry.ACTION_CHANGEDEST)) {
// change destination on an existing entry
// This removes all previous destinations under that hostname,
// is this what we want?
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
if (polddest != null) {
Destination pod = new Destination(polddest);
List<Destination> pod2 = router.lookupAll(key);
if (pod2 == null) {
// we didn't have the old name
// check inner sig anyway
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
} else if (pod2.contains(dest)) {
// we already have the new dest
old++;
continue;
} else if (pod2.contains(pod)) {
// checks out, so verify the inner sig
if (!he.hasValidInnerSig()) {
logInner(log, action, key, addressbook);
invalid++;
continue;
}
if (log != null) {
if (pod2.size() == 1)
log.append("Changing destination for " + key +
". From: " + addressbook.getLocation());
else
log.append("Replacing " + pod2.size() + " destinations for " + key +
". From: " + addressbook.getLocation());
}
allowExistingKeyInPublished = true;
props.setProperty("m", Long.toString(I2PAppContext.getGlobalContext().clock().now()));
} else {
// mismatch, disallow
logMismatch(log, action, key, pod2, polddest, addressbook);
invalid++;
continue;
}
} else {
logMissing(log, action, key, addressbook);
invalid++;
continue;
}
} else if (action.equals(HostTxtEntry.ACTION_CHANGENAME)) {
// Delete old name, replace with new
// This removes all previous destinations under that hostname,
// is this what we want?
if (isKnown) {
old++;
continue;
}
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
if (poldname != null) {
List<Destination> pod = router.lookupAll(poldname);
if (pod == null) {
// we didn't have the old name
} else if (pod.contains(dest)) {
// checks out, so we'll delete it
if (knownNames != null)
knownNames.remove(poldname);
boolean success = router.remove(poldname, dest);
if (success)
deleted++;
if (log != null) {
if (success)
log.append("Removed: " + poldname +
" to be replaced with " + key +
". From: " + addressbook.getLocation());
else
log.append("Remove failed for: " + poldname +
" to be replaced with " + key +
". From: " + addressbook.getLocation());
}
// now update the published addressbook
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.remove(poldname, dest);
if (log != null && !success)
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
}
} else {
// mismatch, disallow
logMismatch(log, action, key, pod, he.getDest(), addressbook);
continue;
}
} else {
logMissing(log, action, key, addressbook);
invalid++;
continue;
}
} else if (action.equals(HostTxtEntry.ACTION_REMOVE) ||
action.equals(HostTxtEntry.ACTION_REMOVEALL)) {
// w/o name=dest handled below
if (log != null)
log.append("Action: " + action + " with name=dest invalid" +
". From: " + addressbook.getLocation());
invalid++;
continue;
} else if (action.equals(HostTxtEntry.ACTION_UPDATE)) {
if (isKnown) {
allowExistingKeyInPublished = true;
props.setProperty("m", Long.toString(I2PAppContext.getGlobalContext().clock().now()));
}
} else {
if (log != null)
log.append("Action: " + action + " unrecognized" +
". From: " + addressbook.getLocation());
invalid++;
continue;
}
} // action != null
boolean success = router.put(key, dest, props);
if (log != null) {
if (success)
log.append("New address " + key +
" added to address book. From: " + sub.getLocation());
" added to address book. From: " + addressbook.getLocation());
else
log.append("Save to naming service " + router + " failed for new key " + key);
}
@@ -171,59 +466,236 @@ public class Daemon {
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.putIfAbsent(key, dest);
if (allowExistingKeyInPublished)
success = publishedNS.put(key, dest, props);
else
success = publishedNS.putIfAbsent(key, dest, props);
if (log != null && !success) {
try {
log.append("Save to published address book " + published.getCanonicalPath() + " failed for new key " + key);
} catch (IOException ioe) {}
log.append("Save to published address book " + published.getAbsolutePath() + " failed for new key " + key);
}
}
if (isTextFile)
// keep track for later dup check
knownNames.add(key);
nnew++;
} else if (key == null) {
// 'remove' actions
// isKnown is false
if (action != null) {
// Process commands. hprops is non-null.
if (action.equals(HostTxtEntry.ACTION_REMOVE)) {
// delete this entry
String polddest = hprops.getProperty(HostTxtEntry.PROP_DEST);
String poldname = hprops.getProperty(HostTxtEntry.PROP_NAME);
if (polddest != null && poldname != null) {
Destination pod = new Destination(polddest);
List<Destination> pod2 = router.lookupAll(poldname);
if (pod2 != null && pod2.contains(pod)) {
if (knownNames != null && pod2.size() == 1)
knownNames.remove(poldname);
boolean success = router.remove(poldname, pod);
if (success)
deleted++;
if (log != null) {
if (success)
log.append("Removed: " + poldname +
" as requested" +
". From: " + addressbook.getLocation());
else
log.append("Remove failed for: " + poldname +
" as requested" +
". From: " + addressbook.getLocation());
}
// now update the published addressbook
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.remove(poldname, pod);
if (log != null && !success)
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
}
} else if (pod2 != null) {
// mismatch, disallow
logMismatch(log, action, key, pod2, polddest, addressbook);
invalid++;
} else {
old++;
}
} else {
logMissing(log, action, "delete", addressbook);
invalid++;
}
} else if (action.equals(HostTxtEntry.ACTION_REMOVEALL)) {
// delete all entries with this destination
String polddest = hprops.getProperty(HostTxtEntry.PROP_DEST);
// oldname is optional, but nice because not all books support reverse lookup
if (polddest != null) {
Destination pod = new Destination(polddest);
String poldname = hprops.getProperty(HostTxtEntry.PROP_NAME);
if (poldname != null) {
List<Destination> pod2 = router.lookupAll(poldname);
if (pod2 != null && pod2.contains(pod)) {
if (knownNames != null)
knownNames.remove(poldname);
boolean success = router.remove(poldname, pod);
if (success)
deleted++;
if (log != null) {
if (success)
log.append("Removed: " + poldname +
" as requested" +
". From: " + addressbook.getLocation());
else
log.append("Remove failed for: " + poldname +
" as requested" +
". From: " + addressbook.getLocation());
}
// now update the published addressbook
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.remove(poldname, pod);
if (log != null && !success)
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
}
} else if (pod2 != null) {
// mismatch, disallow
logMismatch(log, action, key, pod2, polddest, addressbook);
invalid++;
} else {
old++;
}
}
// reverse lookup, delete all
List<String> revs = router.reverseLookupAll(pod);
if (revs != null) {
for (String rev : revs) {
if (knownNames != null)
knownNames.remove(rev);
boolean success = router.remove(rev, pod);
if (success)
deleted++;
if (log != null) {
if (success)
log.append("Removed: " + rev +
" as requested" +
". From: " + addressbook.getLocation());
else
log.append("Remove failed for: " + rev +
" as requested" +
". From: " + addressbook.getLocation());
}
// now update the published addressbook
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.remove(rev, pod);
if (log != null && !success)
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
}
}
}
} else {
logMissing(log, action, "delete", addressbook);
invalid++;
}
} else {
if (log != null)
log.append("Action: " + action + " w/o name=dest unrecognized" +
". From: " + addressbook.getLocation());
invalid++;
}
continue;
} else {
if (log != null)
log.append("No action in command line" +
". From: " + addressbook.getLocation());
invalid++;
continue;
}
} else if (log != null) {
log.append("Bad hostname " + key + " from "
+ sub.getLocation());
log.append("Bad hostname " + key + ". From: "
+ addressbook.getLocation());
invalid++;
}
/****
} else if (false && DEBUG && log != null) {
// lookup the conflict if we haven't yet (O(n**2) for text file)
if (isTextFile)
oldDest = router.lookup(key);
if (oldDest != null && !oldDest.toBase64().equals(entry.getValue())) {
log.append("Conflict for " + key + " from "
+ sub.getLocation()
log.append("Conflict for " + key + ". From: "
+ addressbook.getLocation()
+ ". Destination in remote address book is "
+ entry.getValue());
conflict++;
} else {
old++;
}
****/
} else {
old++;
}
} catch (DataFormatException dfe) {
if (log != null)
log.append("Invalid b64 for " + key + " From: " + sub.getLocation());
log.append("Invalid b64 for " + key + " From: " + addressbook.getLocation());
invalid++;
}
total++;
}
if (DEBUG && log != null && total > 0) {
log.append("Merge of " + sub.getLocation() + " into " + router +
log.append("Merge of " + addressbook.getLocation() + " into " + router +
" took " + (System.currentTimeMillis() - start) + " ms with " +
total + " total, " +
nnew + " new, " +
old + " old, " +
deleted + " deleted, " +
invalid + " invalid, " +
conflict + " conflicts");
}
sub.delete();
}
} // entries
addressbook.delete();
} // subscriptions
subscriptions.write();
}
/** @since 0.9.26 */
private static void logInner(Log log, String action, String name, AddressBook addressbook) {
if (log != null) {
log.append("Action: " + action + " failed because" +
" inner signature for key " + name +
" failed" +
". From: " + addressbook.getLocation());
}
}
/** @since 0.9.26 */
private static void logMissing(Log log, String action, String name, AddressBook addressbook) {
if (log != null) {
log.append("Action: " + action + " for " + name +
" failed, missing required parameters" +
". From: " + addressbook.getLocation());
}
}
/** @since 0.9.26 */
private static void logMismatch(Log log, String action, String name, List<Destination> dests,
String olddest, AddressBook addressbook) {
if (log != null) {
StringBuilder buf = new StringBuilder(16);
final int sz = dests.size();
for (int i = 0; i < sz; i++) {
buf.append(dests.get(i).toBase64().substring(0, 6));
if (i != sz - 1)
buf.append(", ");
}
log.append("Action: " + action + " failed because" +
" destinations for " + name +
" (" + buf + ')' +
" do not include" +
" (" + olddest.substring(0, 6) + ')' +
". From: " + addressbook.getLocation());
}
}
/**
* Run an update, using the Map settings to provide the parameters.
*
@@ -236,16 +708,12 @@ public class Daemon {
File published = null;
boolean should_publish = Boolean.parseBoolean(settings.get("should_publish"));
if (should_publish)
published = new File(home, settings
.get("published_addressbook"));
File subscriptionFile = new File(home, settings
.get("subscriptions"));
published = new File(home, settings.get("published_addressbook"));
File subscriptionFile = new File(home, settings.get("subscriptions"));
File logFile = new File(home, settings.get("log"));
File etagsFile = new File(home, settings.get("etags"));
File lastModifiedFile = new File(home, settings
.get("last_modified"));
File lastFetchedFile = new File(home, settings
.get("last_fetched"));
File lastModifiedFile = new File(home, settings.get("last_modified"));
File lastFetchedFile = new File(home, settings.get("last_fetched"));
long delay;
try {
delay = Long.parseLong(settings.get("update_delay"));
@@ -254,13 +722,14 @@ public class Daemon {
}
delay *= 60 * 60 * 1000;
List<String> defaultSubs = new LinkedList<String>();
List<String> defaultSubs = new ArrayList<String>(4);
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
defaultSubs.add(DEFAULT_SUB);
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings
.get("proxy_host"), Integer.parseInt(settings.get("proxy_port")));
etagsFile, lastModifiedFile, lastFetchedFile,
delay, defaultSubs, settings.get("proxy_host"),
Integer.parseInt(settings.get("proxy_port")));
Log log = SystemVersion.isAndroid() ? null : new Log(logFile);
// If false, add hosts via naming service; if true, write hosts.txt file directly
@@ -319,7 +788,25 @@ public class Daemon {
* others are ignored.
*/
public static void main(String[] args) {
_instance.run(args);
Daemon daemon = new Daemon();
if (args != null && args.length > 0 && args[0].equals("test"))
daemon.test(args);
else
daemon.run(args);
}
/** @since 0.9.26 */
public static void test(String[] args) {
Properties ctxProps = new Properties();
String PROP_FORCE = "i2p.naming.blockfile.writeInAppContext";
ctxProps.setProperty(PROP_FORCE, "true");
I2PAppContext ctx = new I2PAppContext(ctxProps);
NamingService ns = getNamingService("hosts.txt");
File published = new File("test-published.txt");
Log log = new Log(new File("test-log.txt"));
SubscriptionList subscriptions = new SubscriptionList("test-sub.txt");
update(ns, published, subscriptions, log);
ctx.logManager().flush();
}
public void run(String[] args) {
@@ -390,14 +877,14 @@ public class Daemon {
* Call this to get the addressbook to reread its config and
* refetch its subscriptions.
*/
public static void wakeup() {
synchronized (_instance) {
_instance.notifyAll();
public void wakeup() {
synchronized (this) {
notifyAll();
}
}
public static void stop() {
_instance._running = false;
public void stop() {
_running = false;
wakeup();
}
}

View File

@@ -35,7 +35,8 @@ import net.i2p.util.I2PAppThread;
*/
public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
private String[] args;
private final String[] args;
private final Daemon daemon;
/**
* Construct a DaemonThread with the command line arguments args.
@@ -44,6 +45,7 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
*/
public DaemonThread(String[] args) {
this.args = args;
daemon = new Daemon();
}
/* (non-Javadoc)
@@ -56,18 +58,28 @@ public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
//} catch (InterruptedException exp) {
//}
I2PAppContext.getGlobalContext().namingService().registerUpdater(this);
Daemon.main(this.args);
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
try {
if (args != null && args.length > 0 && args[0].equals("test"))
daemon.test(args);
else
daemon.run(args);
} finally {
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
}
}
public void halt() {
Daemon.stop();
daemon.stop();
interrupt();
}
/**
* The NamingServiceUpdater interface
* @param options ignored
* The NamingServiceUpdater interface.
* While this may be called directly, the recommended way
* is to call I2PAppContext.namingService().requestUpdate(Properties)
* which will call this.
*
* @param options ignored, may be null
* @since 0.8.7
*/
public void update(Properties options) {

View File

@@ -32,6 +32,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.NoSuchElementException;
import net.i2p.client.naming.HostTxtEntry;
import net.i2p.data.DataHelper;
/**
@@ -42,22 +43,25 @@ import net.i2p.data.DataHelper;
* Callers should iterate all the way through or call close()
* to ensure the underlying stream is closed.
*
* @since 0.8.7
* This is not used for config files.
* It is only used for subscriptions.
*
* @since 0.8.7, renamed from ConfigIterator in 0.9.26
*/
class ConfigIterator implements Iterator<Map.Entry<String, String>>, Closeable {
class HostTxtIterator implements Iterator<Map.Entry<String, HostTxtEntry>>, Closeable {
private BufferedReader input;
private ConfigEntry next;
private MapEntry next;
/**
* A dummy iterator in which hasNext() is always false.
*/
public ConfigIterator() {}
public HostTxtIterator() {}
/**
* An iterator over the key/value pairs in the file.
*/
public ConfigIterator(File file) throws IOException {
public HostTxtIterator(File file) throws IOException {
FileInputStream fileStream = new FileInputStream(file);
input = new BufferedReader(new InputStreamReader(fileStream, "UTF-8"));
}
@@ -68,15 +72,13 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>>, Closeable {
if (next != null)
return true;
try {
String inputLine = input.readLine();
while (inputLine != null) {
inputLine = ConfigParser.stripComments(inputLine);
String[] splitLine = DataHelper.split(inputLine, "=");
if (splitLine.length == 2) {
next = new ConfigEntry(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
return true;
}
inputLine = input.readLine();
String inputLine;
while ((inputLine = input.readLine()) != null) {
HostTxtEntry he = HostTxtParser.parse(inputLine, true);
if (he == null)
continue;
next = new MapEntry(he.getName(), he);
return true;
}
} catch (IOException ioe) {}
try { input.close(); } catch (IOException ioe) {}
@@ -85,10 +87,15 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>>, Closeable {
return false;
}
public Map.Entry<String, String> next() {
/**
* 'remove' entries will be returned with a null key,
* and the value will contain a null name, null dest,
* and non-null props.
*/
public Map.Entry<String, HostTxtEntry> next() {
if (!hasNext())
throw new NoSuchElementException();
Map.Entry<String, String> rv = next;
Map.Entry<String, HostTxtEntry> rv = next;
next = null;
return rv;
}
@@ -111,11 +118,11 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>>, Closeable {
/**
* The object returned by the iterator.
*/
private static class ConfigEntry implements Map.Entry<String, String> {
private static class MapEntry implements Map.Entry<String, HostTxtEntry> {
private final String key;
private final String value;
private final HostTxtEntry value;
public ConfigEntry(String k, String v) {
public MapEntry(String k, HostTxtEntry v) {
key = k;
value = v;
}
@@ -124,11 +131,11 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>>, Closeable {
return key;
}
public String getValue() {
public HostTxtEntry getValue() {
return value;
}
public String setValue(String v) {
public HostTxtEntry setValue(HostTxtEntry v) {
throw new UnsupportedOperationException();
}

View File

@@ -0,0 +1,294 @@
package net.i2p.addressbook;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import net.i2p.client.naming.HostTxtEntry;
import net.i2p.data.DataHelper;
import net.i2p.util.SecureFile;
import net.i2p.util.SecureFileOutputStream;
import net.i2p.util.SystemVersion;
/**
* Utility class providing methods to parse and write files in a hosts.txt file
* format, and subscription file format.
*
* @since 0.9.26 modified from ConfigParser
*/
class HostTxtParser {
private static final boolean isWindows = SystemVersion.isWindows();
/**
* Return a Map using the contents of BufferedReader input. input must have
* a single key, value pair on each line, in the format: key=value. Lines
* starting with '#' or ';' are considered comments, and ignored. Lines that
* are obviously not in the format key=value are also ignored.
* The key is converted to lower case.
*
* Returned map will not contain null ("remove") entries.
*
* @param input
* A BufferedReader with lines in key=value format to parse into
* a Map.
* @return A Map containing the key, value pairs from input.
* @throws IOException
* if the BufferedReader cannot be read.
*
*/
private static Map<String, HostTxtEntry> parse(BufferedReader input) throws IOException {
try {
Map<String, HostTxtEntry> result = new HashMap<String, HostTxtEntry>();
String inputLine;
while ((inputLine = input.readLine()) != null) {
HostTxtEntry he = parse(inputLine, false);
if (he == null)
continue;
result.put(he.getName(), he);
}
return result;
} finally {
try { input.close(); } catch (IOException ioe) {}
}
}
/**
* Return a HostTxtEntry from the contents of the inputLine.
*
* @param inputLine key=value[#!k1=v1#k2=v2...]
* @param allowCommandOnly if true, a line starting with #! will return
* a HostTxtEntry with a null name and dest and non-null props.
* If false, these lines will return null.
* @return null if no entry found or on error
*/
public static HostTxtEntry parse(String inputLine, boolean allowCommandOnly) {
if (inputLine.startsWith(";"))
return null;
int comment = inputLine.indexOf('#');
String kv;
String sprops;
if (comment >= 0) {
int shebang = inputLine.indexOf(HostTxtEntry.PROPS_SEPARATOR);
if (shebang == comment && shebang + 2 < inputLine.length()) {
if (comment == 0 && !allowCommandOnly)
return null;
sprops = inputLine.substring(shebang + 2);
} else {
if (comment == 0)
return null;
sprops = null;
}
kv = inputLine.substring(0, comment);
} else {
sprops = null;
kv = inputLine;
}
String name, dest;
if (comment != 0) {
// we have a name=dest
String[] splitLine = DataHelper.split(kv, "=", 2);
if (splitLine.length < 2)
return null;
name = splitLine[0].trim().toLowerCase(Locale.US);
dest = splitLine[1].trim();
if (name.length() == 0 || dest.length() == 0)
return null;
} else {
// line starts with #!, rv will contain props only
name = null;
dest = null;
}
HostTxtEntry he;
if (sprops != null) {
try {
he = new HostTxtEntry(name, dest, sprops);
} catch (IllegalArgumentException iae) {
return null;
}
} else {
he = new HostTxtEntry(name, dest);
}
return he;
}
/**
* Return a Map using the contents of the File file. See parse(BufferedReader)
* for details of the input format.
*
* Returned map will not contain null ("remove") entries.
*
* @param file
* A File to parse.
* @return A Map containing the key, value pairs from file.
* @throws IOException
* if file cannot be read.
*/
public static Map<String, HostTxtEntry> parse(File file) throws IOException {
FileInputStream fileStream = null;
try {
fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream, "UTF-8"));
Map<String, HostTxtEntry> rv = parse(input);
return rv;
} finally {
if (fileStream != null) {
try {
fileStream.close();
} catch (IOException ioe) {}
}
}
}
/**
* Return a Map using the contents of the File file. If file cannot be read,
* use map instead, and write the result to where file should have been.
*
* Returned map will not contain null ("remove") entries.
*
* @param file
* A File to attempt to parse.
* @param map
* A Map containing values to use as defaults.
* @return A Map containing the key, value pairs from file, or if file
* cannot be read, map.
*/
public static Map<String, HostTxtEntry> parse(File file, Map<String, HostTxtEntry> map) {
Map<String, HostTxtEntry> result;
try {
result = parse(file);
for (Map.Entry<String, HostTxtEntry> entry : map.entrySet()) {
if (!result.containsKey(entry.getKey()))
result.put(entry.getKey(), entry.getValue());
}
} catch (IOException exp) {
result = map;
try {
write(result, file);
} catch (IOException exp2) {
}
}
return result;
}
/**
* Write contents of Map map to BufferedWriter output. Output is written
* with one key, value pair on each line, in the format: key=value.
*
* @param map
* A Map to write to output.
* @param output
* A BufferedWriter to write the Map to.
* @throws IOException
* if the BufferedWriter cannot be written to.
*/
private static void write(Map<String, HostTxtEntry> map, BufferedWriter output) throws IOException {
try {
for (Map.Entry<String, HostTxtEntry> entry : map.entrySet()) {
entry.getValue().write(output);
}
} finally {
try { output.close(); } catch (IOException ioe) {}
}
}
/**
* Write contents of Map map to the File file. Output is written
* with one key, value pair on each line, in the format: key=value.
* Write to a temp file in the same directory and then rename, to not corrupt
* simultaneous accesses by the router. Except on Windows where renameTo()
* will fail if the target exists.
*
* @param map
* A Map to write to file.
* @param file
* A File to write the Map to.
* @throws IOException
* if file cannot be written to.
*/
public static void write(Map<String, HostTxtEntry> map, File file) throws IOException {
boolean success = false;
if (!isWindows) {
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
success = tmp.renameTo(file);
if (!success) {
tmp.delete();
//System.out.println("Warning: addressbook rename fail from " + tmp + " to " + file);
}
}
if (!success) {
// hmm, that didn't work, try it the old way
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
}
}
/**
* Usage: HostTxtParser [-q] validate example.i2p=b64dest[#!key1=val1#key2=val2]
*/
public static void main(String[] args) throws Exception {
boolean quiet = false;
if (args.length > 0 && args[0].equals("-q")) {
quiet = true;
args = java.util.Arrays.copyOfRange(args, 1, args.length);
}
if (args.length != 2 || !args[0].equals("validate")) {
System.err.println("Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]");
System.exit(1);
}
HostTxtEntry e = parse(args[1].trim(), false);
if (e == null) {
if (!quiet)
System.err.println("Bad format");
System.exit(2);
}
if (!e.hasValidSig()) {
if (!quiet)
System.err.println("Bad signature");
System.exit(3);
}
Properties p = e.getProps();
if (p != null) {
if (p.containsKey(HostTxtEntry.PROP_ACTION) ||
p.containsKey(HostTxtEntry.PROP_OLDDEST) ||
p.containsKey(HostTxtEntry.PROP_OLDNAME) ||
p.containsKey(HostTxtEntry.PROP_OLDSIG)) {
if (!e.hasValidSig()) {
if (!quiet)
System.err.println("Bad inner signature");
System.exit(4);
}
}
}
if (!quiet)
System.err.println("Good signature for " + e.getName());
System.exit(0);
}
/****
public static void test(String[] args) throws Exception {
File f = new File("tmp-hosts.txt");
Map<String, HostTxtEntry> map = parse(f);
for (HostTxtEntry e : map.values()) {
System.out.println("Host: " + e.getName() +
"\nDest: " + e.getDest() +
"\nAction: " + (e.getProps() != null ? e.getProps().getProperty("action") : "(none)") +
"\nValid Inner? " + e.hasValidInnerSig() +
"\nValid? " + e.hasValidSig() +
'\n');
}
}
****/
}

View File

@@ -36,7 +36,7 @@ import java.util.Date;
*/
class Log {
private File file;
private final File file;
/**
* Construct a Log instance that writes to the File file.
@@ -74,7 +74,9 @@ class Log {
*
* @return The File that the log is writing to.
*/
/****
public File getFile() {
return this.file;
}
****/
}

View File

@@ -29,10 +29,8 @@ package net.i2p.addressbook;
*/
class Subscription {
private String location;
private final String location;
private String etag;
private String lastModified;
private long lastFetched;
@@ -41,14 +39,15 @@ class Subscription {
* was last read at the time represented by etag and lastModified.
*
* @param location
* A String representing a url to a remote address book.
* A String representing a url to a remote address book. Non-null.
* @param etag
* The etag header that we recieved the last time we read this
* subscription.
* The etag header that we received the last time we read this
* subscription. May be null.
* @param lastModified
* the last-modified header we recieved the last time we read
* this subscription.
* @param lastFetched when the subscription was last fetched (Java time, as a String)
* the last-modified header we received the last time we read
* this subscription. May be null.
* @param lastFetched when the subscription was last fetched (Java time, as a String).
* May be null.
*/
public Subscription(String location, String etag, String lastModified, String lastFetched) {
this.location = location;
@@ -71,7 +70,7 @@ class Subscription {
}
/**
* Return the etag header that we recieved the last time we read this
* Return the etag header that we received the last time we read this
* subscription.
*
* @return A String containing the etag header.
@@ -91,7 +90,7 @@ class Subscription {
}
/**
* Return the last-modified header that we recieved the last time we read
* Return the last-modified header that we received the last time we read
* this subscription.
*
* @return A String containing the last-modified header.

View File

@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.List;
import net.i2p.I2PAppContext;
import net.i2p.client.naming.HostTxtEntry;
import net.i2p.util.PortMapper;
/**
@@ -37,9 +38,9 @@ import net.i2p.util.PortMapper;
*/
class SubscriptionIterator implements Iterator<AddressBook> {
private Iterator<Subscription> subIterator;
private String proxyHost;
private int proxyPort;
private final Iterator<Subscription> subIterator;
private final String proxyHost;
private final int proxyPort;
private final long delay;
/**
@@ -75,7 +76,10 @@ class SubscriptionIterator implements Iterator<AddressBook> {
*/
public AddressBook next() {
Subscription sub = this.subIterator.next();
if (sub.getLastFetched() + this.delay < I2PAppContext.getGlobalContext().clock().now() &&
if (sub.getLocation().startsWith("file:")) {
// test only
return new AddressBook(sub.getLocation().substring(5));
} else if (sub.getLastFetched() + this.delay < I2PAppContext.getGlobalContext().clock().now() &&
I2PAppContext.getGlobalContext().portMapper().getPort(PortMapper.SVC_HTTP_PROXY) >= 0 &&
!I2PAppContext.getGlobalContext().getBooleanProperty("i2p.vmCommSystem")) {
//System.err.println("Fetching addressbook from " + sub.getLocation());
@@ -85,7 +89,7 @@ class SubscriptionIterator implements Iterator<AddressBook> {
// DataHelper.formatDuration(I2PAppContext.getGlobalContext().clock().now() - sub.getLastFetched()) +
// " ago but the minimum delay is " +
// DataHelper.formatDuration(this.delay));
return new AddressBook(Collections.<String, String> emptyMap());
return new AddressBook(Collections.<String, HostTxtEntry>emptyMap());
}
}

View File

@@ -23,8 +23,9 @@ package net.i2p.addressbook;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -34,19 +35,15 @@ import java.util.Map;
* @author Ragnarok
*
*/
class SubscriptionList {
class SubscriptionList implements Iterable<AddressBook> {
private List<Subscription> subscriptions;
private File etagsFile;
private File lastModifiedFile;
private File lastFetchedFile;
private final List<Subscription> subscriptions;
private final File etagsFile;
private final File lastModifiedFile;
private final File lastFetchedFile;
private final long delay;
private String proxyHost;
private int proxyPort;
private final String proxyHost;
private final int proxyPort;
/**
* Construct a SubscriptionList using the urls from locationsFile and, if
@@ -69,7 +66,7 @@ class SubscriptionList {
public SubscriptionList(File locationsFile, File etagsFile,
File lastModifiedFile, File lastFetchedFile, long delay, List<String> defaultSubs, String proxyHost,
int proxyPort) {
this.subscriptions = new LinkedList<Subscription>();
this.subscriptions = new ArrayList<Subscription>(4);
this.etagsFile = etagsFile;
this.lastModifiedFile = lastModifiedFile;
this.lastFetchedFile = lastFetchedFile;
@@ -84,17 +81,17 @@ class SubscriptionList {
try {
etags = ConfigParser.parse(etagsFile);
} catch (IOException exp) {
etags = new HashMap<String, String>();
etags = Collections.<String, String>emptyMap();
}
try {
lastModified = ConfigParser.parse(lastModifiedFile);
} catch (IOException exp) {
lastModified = new HashMap<String, String>();
lastModified = Collections.<String, String>emptyMap();
}
try {
lastFetched = ConfigParser.parse(lastFetchedFile);
} catch (IOException exp) {
lastFetched = new HashMap<String, String>();
lastFetched = Collections.<String, String>emptyMap();
}
for (String location : locations) {
this.subscriptions.add(new Subscription(location, etags.get(location),
@@ -103,6 +100,24 @@ class SubscriptionList {
}
}
/**
* Testing only.
*
* @param hoststxt path to a local file used as the test 'subscription' input
* @since 0.9.26
*/
public SubscriptionList(String hoststxt) {
File dummy = new File("/dev/null");
this.etagsFile = dummy;
this.lastModifiedFile = dummy;
this.lastFetchedFile = dummy;
this.delay = 0;
this.proxyHost = "127.0.0.1";
this.proxyPort = 4444;
Subscription sub = new Subscription("file:" + hoststxt, null, null, null);
this.subscriptions = Collections.singletonList(sub);
}
/**
* Return an iterator over the AddressBooks represented by the Subscriptions
* in this SubscriptionList.
@@ -121,9 +136,10 @@ class SubscriptionList {
* won't be read back correctly; the '=' should be escaped.
*/
public void write() {
Map<String, String> etags = new HashMap<String, String>();
Map<String, String> lastModified = new HashMap<String, String>();
Map<String, String> lastFetched = new HashMap<String, String>();
int sz = subscriptions.size();
Map<String, String> etags = new HashMap<String, String>(sz);
Map<String, String> lastModified = new HashMap<String, String>(sz);
Map<String, String> lastFetched = new HashMap<String, String>(sz);
for (Subscription sub : this.subscriptions) {
if (sub.getEtag() != null) {
etags.put(sub.getLocation(), sub.getEtag());
@@ -131,13 +147,16 @@ class SubscriptionList {
if (sub.getLastModified() != null) {
lastModified.put(sub.getLocation(), sub.getLastModified());
}
lastFetched.put(sub.getLocation(), "" + sub.getLastFetched());
lastFetched.put(sub.getLocation(), Long.toString(sub.getLastFetched()));
}
try {
ConfigParser.write(etags, this.etagsFile);
} catch (IOException exp) {}
try {
ConfigParser.write(lastModified, this.lastModifiedFile);
} catch (IOException exp) {}
try {
ConfigParser.write(lastFetched, this.lastFetchedFile);
} catch (IOException exp) {
}
} catch (IOException exp) {}
}
}

View File

@@ -1,7 +1,7 @@
<html>
<body>
<p>
The addressbook application, which fetches hosts.txt files from subscription URLS via
The addressbook application, which fetches hosts.txt files from subscription URLs via
HTTP and adds new hosts to the local database.
While implemented as a webapp, this application contains no user interface.
May also be packaged as a jar, as is done for Android.

View File

@@ -36,8 +36,8 @@ import java.io.IOException;
import java.io.RandomAccessFile;
public class RAIFile implements RandomAccessInterface, DataInput, DataOutput {
private File f;
private RandomAccessFile delegate;
private final File f;
private final RandomAccessFile delegate;
private final boolean r, w;
public RAIFile(RandomAccessFile file) throws FileNotFoundException {

View File

@@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.metanotion.io;
public interface Serializer {
public byte[] getBytes(Object o);
public Object construct(byte[] b);
public interface Serializer<T> {
public byte[] getBytes(T o);
public T construct(byte[] b);
}

View File

@@ -32,8 +32,11 @@ import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;
import net.metanotion.io.RAIFile;
@@ -94,7 +97,7 @@ public class BlockFile implements Closeable {
/** I2P was the file locked when we opened it? */
private final boolean _wasMounted;
private final BSkipList metaIndex;
private final BSkipList<String, Integer> metaIndex;
private boolean _isClosed;
/** cached list of free pages, only valid if freListStart > 0 */
private FreeListBlock flb;
@@ -320,7 +323,7 @@ public class BlockFile implements Closeable {
if (rai.canWrite())
mount();
metaIndex = new BSkipList(spanSize, this, METAINDEX_PAGE, new StringBytes(), new IntBytes());
metaIndex = new BSkipList<String, Integer>(spanSize, this, METAINDEX_PAGE, new StringBytes(), new IntBytes());
}
/**
@@ -334,7 +337,7 @@ public class BlockFile implements Closeable {
/**
* Go to any page but the superblock.
* Page 1 is the superblock, must use file.seek(0) to get there.
* @param page >= 2
* @param page &gt;= 2
*/
public static void pageSeek(RandomAccessInterface file, int page) throws IOException {
if (page < METAINDEX_PAGE)
@@ -431,18 +434,25 @@ public class BlockFile implements Closeable {
}
/**
* Open a skiplist if it exists.
* Returns null if the skiplist does not exist.
* Empty skiplists are not preserved after close.
*
* If the file is writable, this runs an integrity check and repair
* on first open.
*
* @return null if not found
*/
public BSkipList getIndex(String name, Serializer key, Serializer val) throws IOException {
@SuppressWarnings("unchecked")
public <K extends Comparable<? super K>, V> BSkipList<K, V> getIndex(String name, Serializer<K> key, Serializer<V> val) throws IOException {
// added I2P
BSkipList bsl = openIndices.get(name);
BSkipList<K, V> bsl = (BSkipList<K, V>) openIndices.get(name);
if (bsl != null)
return bsl;
Integer page = (Integer) metaIndex.get(name);
Integer page = metaIndex.get(name);
if (page == null) { return null; }
bsl = new BSkipList(spanSize, this, page.intValue(), key, val, true);
bsl = new BSkipList<K, V>(spanSize, this, page.intValue(), key, val, true);
if (file.canWrite()) {
log.info("Checking skiplist " + name + " in blockfile " + file);
if (bsl.bslck(true, false))
@@ -454,25 +464,43 @@ public class BlockFile implements Closeable {
return bsl;
}
public BSkipList makeIndex(String name, Serializer key, Serializer val) throws IOException {
/**
* Create and open a new skiplist if it does not exist.
* Throws IOException if it already exists.
*
* @throws IOException if already exists or other errors
*/
public <K extends Comparable<? super K>, V> BSkipList<K, V> makeIndex(String name, Serializer<K> key, Serializer<V> val) throws IOException {
if(metaIndex.get(name) != null) { throw new IOException("Index already exists"); }
int page = allocPage();
metaIndex.put(name, Integer.valueOf(page));
BSkipList.init(this, page, spanSize);
BSkipList bsl = new BSkipList(spanSize, this, page, key, val, true);
BSkipList<K, V> bsl = new BSkipList<K, V>(spanSize, this, page, key, val, true);
openIndices.put(name, bsl);
return bsl;
}
/**
* Delete a skiplist if it exists.
* Must be open. Throws IOException if exists but is closed.
* Broken before 0.9.26.
*
* @throws IOException if it is closed.
*/
public void delIndex(String name) throws IOException {
Integer page = (Integer) metaIndex.remove(name);
if (page == null) { return; }
Serializer nb = new IdentityBytes();
BSkipList bsl = new BSkipList(spanSize, this, page.intValue(), nb, nb, true);
if (metaIndex.get(name) == null)
return;
BSkipList bsl = openIndices.get(name);
if (bsl == null)
throw new IOException("Cannot delete closed skiplist, open it first: " + name);
bsl.delete();
openIndices.remove(name);
metaIndex.remove(name);
}
/**
* Close a skiplist if it is open.
*
* Added I2P
*/
public void closeIndex(String name) {
@@ -482,8 +510,75 @@ public class BlockFile implements Closeable {
}
/**
* Reformat a skiplist with new Serializers if it exists.
* The skiplist must be closed.
* Throws IOException if the skiplist is open.
* The skiplist will remain closed after completion.
*
* @throws IOException if it is open or on errors
* @since 0.9.26
*/
public <K extends Comparable<? super K>, V> void reformatIndex(String name, Serializer<K> oldKey, Serializer<V> oldVal,
Serializer<K> newKey, Serializer<V> newVal) throws IOException {
if (openIndices.containsKey(name))
throw new IOException("Cannot reformat open skiplist " + name);
BSkipList<K, V> old = getIndex(name, oldKey, oldVal);
if (old == null)
return;
long start = System.currentTimeMillis();
String tmpName = "---tmp---" + name + "---tmp---";
BSkipList<K, V> tmp = getIndex(tmpName, newKey, newVal);
if (tmp != null) {
log.logAlways(Log.WARN, "Continuing on aborted reformat of list " + name);
} else {
tmp = makeIndex(tmpName, newKey, newVal);
}
// It could be much more efficient to do this at the
// SkipSpan layer but that's way too hard.
final int loop = 32;
List<K> keys = new ArrayList<K>(loop);
List<V> vals = new ArrayList<V>(loop);
while (true) {
SkipIterator<K, V> iter = old.iterator();
for (int i = 0; iter.hasNext() && i < loop; i++) {
try {
keys.add(iter.nextKey());
vals.add(iter.next());
} catch (NoSuchElementException nsee) {
throw new IOException("Unable to reformat corrupt list " + name, nsee);
}
}
// save state, as deleting corrupts the iterator
boolean done = !iter.hasNext();
for (int i = 0; i < keys.size(); i++) {
tmp.put(keys.get(i), vals.get(i));
}
for (int i = keys.size() - 1; i >= 0; i--) {
old.remove(keys.get(i));
}
if (done)
break;
keys.clear();
vals.clear();
}
delIndex(name);
closeIndex(name);
closeIndex(tmpName);
Integer page = metaIndex.get(tmpName);
metaIndex.put(name, page);
metaIndex.remove(tmpName);
if (log.shouldWarn())
log.warn("reformatted list: " + name + " in " +
(System.currentTimeMillis() - start) + "ms");
}
/**
* Closes all open skiplists and then the blockfile itself.
*
* Note (I2P)
* Does NOT close the RAF / RAI.
* Does NOT close the RAF / RAI.
*/
public void close() throws IOException {
// added I2P
@@ -539,9 +634,15 @@ public class BlockFile implements Closeable {
try {
// This uses IdentityBytes, so the value class won't be right, but at least
// it won't fail the out-of-order check
Serializer keyser = slname.equals("%%__REVERSE__%%") ? new IntBytes() : new UTF8StringBytes();
BSkipList bsl = getIndex(slname, keyser, new IdentityBytes());
if (bsl == null) {
boolean fail;
if (slname.equals("%%__REVERSE__%%")) {
Serializer<Integer> keyser = new IntBytes();
fail = getIndex(slname, keyser, new IdentityBytes()) == null;
} else {
Serializer<String> keyser = new UTF8StringBytes();
fail = getIndex(slname, keyser, new IdentityBytes()) == null;
}
if (fail) {
log.error("Can't find list? " + slname);
continue;
}

View File

@@ -55,13 +55,13 @@ import net.i2p.util.Log;
*
* Always fits on one page.
*/
public class BSkipLevels extends SkipLevels {
public class BSkipLevels<K extends Comparable<? super K>, V> extends SkipLevels<K, V> {
private static final long MAGIC = 0x42534c6576656c73l; // "BSLevels"
static final int HEADER_LEN = 16;
public final int levelPage;
public final int spanPage;
public final BlockFile bf;
private final BSkipList bsl;
private final BSkipList<K, V> bsl;
private boolean isKilled;
// the level pages, passed from the constructor to initializeLevels(),
// NOT kept up to date
@@ -73,7 +73,8 @@ public class BSkipLevels extends SkipLevels {
* after the constructor, unless it's a new empty
* level and init() was previously called.
*/
public BSkipLevels(BlockFile bf, int levelPage, BSkipList bsl) throws IOException {
@SuppressWarnings("unchecked")
public BSkipLevels(BlockFile bf, int levelPage, BSkipList<K, V> bsl) throws IOException {
this.levelPage = levelPage;
this.bf = bf;
this.bsl = bsl;
@@ -97,7 +98,7 @@ public class BSkipLevels extends SkipLevels {
throw new IOException("No span found in cache???");
}
this.levels = new BSkipLevels[maxLen];
this.levels = (BSkipLevels<K, V>[]) new BSkipLevels[maxLen];
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Reading New BSkipLevels with " + nonNull + " / " + maxLen + " valid levels page " + levelPage +
" in skiplist " + bsl);
@@ -118,14 +119,14 @@ public class BSkipLevels extends SkipLevels {
* @since 0.9.20
*/
public void initializeLevels() {
List<BSkipLevels> toInit = new ArrayList<BSkipLevels>(32);
List<BSkipLevels> nextInit = new ArrayList<BSkipLevels>(32);
List<BSkipLevels<K, V>> toInit = new ArrayList<BSkipLevels<K, V>>(32);
List<BSkipLevels<K, V>> nextInit = new ArrayList<BSkipLevels<K, V>>(32);
initializeLevels(toInit);
while (!toInit.isEmpty()) {
for (BSkipLevels bsl : toInit) {
for (BSkipLevels<K, V> bsl : toInit) {
bsl.initializeLevels(nextInit);
}
List<BSkipLevels> tmp = toInit;
List<BSkipLevels<K, V>> tmp = toInit;
toInit = nextInit;
nextInit = tmp;
nextInit.clear();
@@ -139,7 +140,7 @@ public class BSkipLevels extends SkipLevels {
* @param nextInit out parameter, next levels to initialize
* @since 0.9.20
*/
private void initializeLevels(List<BSkipLevels> nextInit) {
private void initializeLevels(List<BSkipLevels<K, V>> nextInit) {
boolean fail = false;
for(int i = 0; i < lps.length; i++) {
int lp = lps[i];
@@ -147,7 +148,7 @@ public class BSkipLevels extends SkipLevels {
levels[i] = bsl.levelHash.get(Integer.valueOf(lp));
if(levels[i] == null) {
try {
BSkipLevels lev = new BSkipLevels(bf, lp, bsl);
BSkipLevels<K, V> lev = new BSkipLevels<K, V>(bf, lp, bsl);
levels[i] = lev;
nextInit.add(lev);
} catch (IOException ioe) {
@@ -158,8 +159,8 @@ public class BSkipLevels extends SkipLevels {
continue;
}
}
Comparable ourKey = key();
Comparable nextKey = levels[i].key();
K ourKey = key();
K nextKey = levels[i].key();
if (ourKey != null && nextKey != null &&
ourKey.compareTo(nextKey) >= 0) {
bf.log.warn("Corrupt database, level out of order " + this +
@@ -172,7 +173,7 @@ public class BSkipLevels extends SkipLevels {
// TODO also check that the level[] array is not out-of-order
} else {
if (bf.log.shouldLog(Log.WARN))
bf.log.warn("WTF " + this + " i = " + i + " of " +
bf.log.warn(this + " i = " + i + " of " +
lps.length + " / " + levels.length +
" valid levels but page is zero");
levels[i] = null;
@@ -215,9 +216,9 @@ public class BSkipLevels extends SkipLevels {
break;
}
bf.file.writeShort(i);
bf.file.writeInt(((BSkipSpan) bottom).page);
bf.file.writeInt(((BSkipSpan<K, V>) bottom).page);
for(int j = 0; j < i; j++) {
bf.file.writeInt(((BSkipLevels) levels[j]).levelPage);
bf.file.writeInt(((BSkipLevels<K, V>) levels[j]).levelPage);
}
} catch (IOException ioe) { throw new RuntimeException("Error writing to database", ioe); }
}
@@ -229,22 +230,22 @@ public class BSkipLevels extends SkipLevels {
return;
}
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Killing " + this + ' ' + print(), new Exception());
bf.log.debug("Killing " + this + ' ' + print() /* , new Exception() */ );
isKilled = true;
bsl.levelHash.remove(Integer.valueOf(levelPage));
bf.freePage(levelPage);
}
@Override
public SkipLevels newInstance(int levels, SkipSpan ss, SkipList sl) {
public SkipLevels<K, V> newInstance(int levels, SkipSpan<K, V> ss, SkipList<K, V> sl) {
try {
BSkipSpan bss = (BSkipSpan) ss;
BSkipList bsl = (BSkipList) sl;
BSkipSpan<K, V> bss = (BSkipSpan<K, V>) ss;
BSkipList<K, V> bsl = (BSkipList<K, V>) sl;
int page = bf.allocPage();
BSkipLevels.init(bf, page, bss.page, levels);
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("New BSkipLevels height " + levels + " page " + page);
return new BSkipLevels(bf, page, bsl);
return new BSkipLevels<K, V>(bf, page, bsl);
// do not need to call initLevels() here
} catch (IOException ioe) { throw new RuntimeException("Error creating database page", ioe); }
}
@@ -273,7 +274,7 @@ public class BSkipLevels extends SkipLevels {
* @since 0.8.8
*/
private boolean blvlfix() {
TreeSet<SkipLevels> lvls = new TreeSet<SkipLevels>(new LevelComparator());
TreeSet<SkipLevels<K, V>> lvls = new TreeSet<SkipLevels<K, V>>(new LevelComparator<K, V>());
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Starting level search");
getAllLevels(this, lvls);
@@ -285,15 +286,15 @@ public class BSkipLevels extends SkipLevels {
}
// traverse the levels, back-to-front
boolean rv = false;
SkipLevels after = null;
for (SkipLevels lv : lvls) {
SkipLevels<K, V> after = null;
for (SkipLevels<K, V> lv : lvls) {
boolean modified = false;
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Checking " + lv.print());
if (after != null) {
int min = Math.min(after.levels.length, lv.levels.length);
for (int i = 0; i < min; i++) {
SkipLevels cur = lv.levels[i];
SkipLevels<K, V> cur = lv.levels[i];
if (cur != after) {
if (cur != null)
bf.log.warn("Level " + i + " was wrong, fixing for " + lv.print());
@@ -331,12 +332,12 @@ public class BSkipLevels extends SkipLevels {
* @param lvlSet out parameter, the result
* @since 0.8.8
*/
private void getAllLevels(SkipLevels l, Set<SkipLevels> lvlSet) {
private void getAllLevels(SkipLevels<K, V> l, Set<SkipLevels<K, V>> lvlSet) {
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("GAL " + l.print());
// Do level 0 without recursion, on the assumption everything is findable
// from the root
SkipLevels cur = l;
SkipLevels<K, V> cur = l;
while (cur != null && lvlSet.add(cur)) {
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Adding " + cur.print());
@@ -347,7 +348,7 @@ public class BSkipLevels extends SkipLevels {
// If there were no nulls at level 0 in the middle,
// i.e. there are no problems, this won't find anything
for (int i = 1; i < l.levels.length; i++) {
SkipLevels lv = l.levels[i];
SkipLevels<K, V> lv = l.levels[i];
if (lv != null && !lvlSet.contains(lv))
getAllLevels(lv, lvlSet);
}
@@ -358,10 +359,10 @@ public class BSkipLevels extends SkipLevels {
* Sorts in REVERSE order.
* @since 0.8.8
*/
private static class LevelComparator implements Comparator<SkipLevels>, Serializable {
public int compare(SkipLevels l, SkipLevels r) {
Comparable lk = l.key();
Comparable rk = r.key();
private static class LevelComparator<K extends Comparable<? super K>, V> implements Comparator<SkipLevels<K, V>>, Serializable {
public int compare(SkipLevels<K, V> l, SkipLevels<K, V> r) {
K lk = l.key();
K rk = r.key();
if (lk == null && rk == null)
return 0;
if (lk == null)
@@ -378,13 +379,14 @@ public class BSkipLevels extends SkipLevels {
* This needs work.
*/
@Override
public boolean blvlck(boolean fix, int width, SkipLevels[] prevLevels) {
@SuppressWarnings("unchecked")
public boolean blvlck(boolean fix, int width, SkipLevels<K, V>[] prevLevels) {
bf.log.warn(" Skip level at width " + width);
bf.log.warn(" levels " + this.levels.length);
bf.log.warn(" first key " + this.key());
bf.log.warn(" spanPage " + this.spanPage);
bf.log.warn(" levelPage " + this.levelPage);
SkipLevels higher = null;
SkipLevels<K, V> higher = null;
for (int i = levels.length - 1; i >= 0; i--) {
if (levels[i] != null) {
bf.log.info(" level " + i + " -> " + levels[i].key() + " ");
@@ -418,7 +420,7 @@ public class BSkipLevels extends SkipLevels {
}
}
} else {
prevLevels = new SkipLevels[levels.length];
prevLevels = (SkipLevels<K, V>[]) new SkipLevels[levels.length];
System.arraycopy(levels, 0, prevLevels, 0, levels.length);
}
if (levels[0] != null)

View File

@@ -51,7 +51,7 @@ import net.i2p.util.Log;
*
* Always fits on one page.
*/
public class BSkipList extends SkipList implements Closeable {
public class BSkipList<K extends Comparable<? super K>, V> extends SkipList<K, V> implements Closeable {
private static final long MAGIC = 0x536b69704c697374l; // "SkipList"
public int firstSpanPage = 0;
public int firstLevelPage = 0;
@@ -59,16 +59,16 @@ public class BSkipList extends SkipList implements Closeable {
public final BlockFile bf;
private boolean isClosed;
final HashMap<Integer, BSkipSpan> spanHash = new HashMap<Integer, BSkipSpan>();
final HashMap<Integer, SkipLevels> levelHash = new HashMap<Integer, SkipLevels>();
final HashMap<Integer, BSkipSpan<K, V>> spanHash = new HashMap<Integer, BSkipSpan<K, V>>();
final HashMap<Integer, SkipLevels<K, V>> levelHash = new HashMap<Integer, SkipLevels<K, V>>();
private final boolean fileOnly;
public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer key, Serializer val) throws IOException {
public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer<K> key, Serializer<V> val) throws IOException {
this(spanSize, bf, skipPage, key, val, false);
}
public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer key, Serializer val, boolean fileOnly) throws IOException {
public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer<K> key, Serializer<V> val, boolean fileOnly) throws IOException {
if(spanSize < 1) { throw new RuntimeException("Span size too small"); }
this.skipPage = skipPage;
@@ -89,10 +89,10 @@ public class BSkipList extends SkipList implements Closeable {
this.fileOnly = fileOnly;
if (fileOnly)
first = new IBSkipSpan(bf, this, firstSpanPage, key, val);
first = new IBSkipSpan<K, V>(bf, this, firstSpanPage, key, val);
else
first = new BSkipSpan(bf, this, firstSpanPage, key, val);
BSkipLevels bstack = new BSkipLevels(bf, firstLevelPage, this);
first = new BSkipSpan<K, V>(bf, this, firstSpanPage, key, val);
BSkipLevels<K, V> bstack = new BSkipLevels<K, V>(bf, firstLevelPage, this);
bstack.initializeLevels();
stack = bstack;
int total = 0;
@@ -104,7 +104,8 @@ public class BSkipList extends SkipList implements Closeable {
if (bf.file.canWrite() &&
(levelCount != levelHash.size() || spans != spanHash.size() || size != total)) {
if (bf.log.shouldLog(Log.WARN))
bf.log.warn("On-disk counts were " + levelCount + " / " + spans + " / " + size + ", correcting");
bf.log.warn("On-disk counts were " + levelCount + " levels / " + spans +
" spans / " + size + " entries, correcting to " + total + " entries");
size = total;
flush();
}
@@ -151,7 +152,6 @@ public class BSkipList extends SkipList implements Closeable {
curLevel.killInstance();
curLevel = nextLevel;
}
stack.killInstance();
SkipSpan curSpan = first;
while(curSpan != null) {
@@ -200,33 +200,36 @@ public class BSkipList extends SkipList implements Closeable {
}
@Override
public SkipIterator iterator() {
public SkipIterator<K, V> iterator() {
if (!this.fileOnly)
return super.iterator();
return new IBSkipIterator(first, 0);
return new IBSkipIterator<K, V>(first, 0);
}
@Override
public SkipIterator min() {
/****
//@Override
public SkipIterator<K, V> min() {
return iterator();
}
@Override
public SkipIterator max() {
//@Override
public SkipIterator<K, V> max() {
if (!this.fileOnly)
return super.max();
SkipSpan ss = stack.getEnd();
return new IBSkipIterator(ss, ss.nKeys - 1);
SkipSpan<K, V> ss = stack.getEnd();
return new IBSkipIterator<K, V>(ss, ss.nKeys - 1);
}
****/
/** find */
@Override
public SkipIterator find(Comparable key) {
public SkipIterator<K, V> find(K key) {
if (!this.fileOnly)
return super.find(key);
int[] search = new int[1];
SkipSpan ss = stack.getSpan(stack.levels.length - 1, key, search);
SkipSpan<K, V> ss = stack.getSpan(stack.levels.length - 1, key, search);
if(search[0] < 0) { search[0] = -1 * (search[0] + 1); }
return new IBSkipIterator(ss, search[0]);
return new IBSkipIterator<K, V>(ss, search[0]);
}
/**

View File

@@ -59,19 +59,19 @@ import net.i2p.util.Log;
* next overflow page (unsigned int)
*</pre>
*/
public class BSkipSpan extends SkipSpan {
public class BSkipSpan<K extends Comparable<? super K>, V> extends SkipSpan<K, V> {
protected static final int MAGIC = 0x5370616e; // "Span"
protected static final int HEADER_LEN = 20;
public static final int CONT_HEADER_LEN = 8;
protected final BlockFile bf;
private final BSkipList bsl;
private final BSkipList<K, V> bsl;
protected int page;
protected int overflowPage;
protected int prevPage;
protected int nextPage = 0;
protected Serializer keySer;
protected Serializer valSer;
protected Serializer<K> keySer;
protected Serializer<V> valSer;
// I2P
protected int spanSize;
@@ -88,11 +88,11 @@ public class BSkipSpan extends SkipSpan {
}
@Override
public SkipSpan newInstance(SkipList sl) {
public SkipSpan<K, V> newInstance(SkipList<K, V> sl) {
try {
int newPage = bf.allocPage();
init(bf, newPage, bf.spanSize);
return new BSkipSpan(bf, (BSkipList) sl, newPage, keySer, valSer);
return new BSkipSpan<K, V>(bf, (BSkipList<K, V>) sl, newPage, keySer, valSer);
} catch (IOException ioe) { throw new RuntimeException("Error creating database page", ioe); }
}
@@ -237,7 +237,8 @@ public class BSkipSpan extends SkipSpan {
//bsl.flush();
}
private static void load(BSkipSpan bss, BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
private static <X extends Comparable<? super X>, Y> void load(BSkipSpan<X, Y> bss, BlockFile bf, BSkipList<X, Y> bsl,
int spanPage, Serializer<X> key, Serializer<Y> val) throws IOException {
loadInit(bss, bf, bsl, spanPage, key, val);
bss.loadData();
}
@@ -246,7 +247,8 @@ public class BSkipSpan extends SkipSpan {
* I2P - first half of load()
* Only read the span headers
*/
protected static void loadInit(BSkipSpan bss, BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
protected static <X extends Comparable<? super X>, Y> void loadInit(BSkipSpan<X, Y> bss, BlockFile bf, BSkipList<X, Y> bsl,
int spanPage, Serializer<X> key, Serializer<Y> val) throws IOException {
if (bss.isKilled)
throw new IOException("Already killed!! " + bss);
bss.page = spanPage;
@@ -285,11 +287,12 @@ public class BSkipSpan extends SkipSpan {
* Load the whole span's keys and values into memory
* @param flushOnError set to false if you are going to flush anyway
*/
@SuppressWarnings("unchecked")
protected void loadData(boolean flushOnError) throws IOException {
if (isKilled)
throw new IOException("Already killed!! " + this);
this.keys = new Comparable[this.spanSize];
this.vals = new Object[this.spanSize];
this.keys = (K[]) new Comparable[this.spanSize];
this.vals = (V[]) new Object[this.spanSize];
int ksz, vsz;
int curPage = this.page;
@@ -327,7 +330,7 @@ public class BSkipSpan extends SkipSpan {
break;
}
// System.out.println("i=" + i + ", Page " + curPage + ", offset " + pageCounter[0] + " ksz " + ksz + " vsz " + vsz);
this.keys[i] = (Comparable) this.keySer.construct(k);
this.keys[i] = this.keySer.construct(k);
this.vals[i] = this.valSer.construct(v);
// Drop bad entry without throwing exception
if (this.keys[i] == null || this.vals[i] == null) {
@@ -377,31 +380,31 @@ public class BSkipSpan extends SkipSpan {
}
}
protected BSkipSpan(BlockFile bf, BSkipList bsl) {
protected BSkipSpan(BlockFile bf, BSkipList<K, V> bsl) {
this.bf = bf;
this.bsl = bsl;
}
public BSkipSpan(BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
public BSkipSpan(BlockFile bf, BSkipList<K, V> bsl, int spanPage, Serializer<K> key, Serializer<V> val) throws IOException {
this.bf = bf;
this.bsl = bsl;
BSkipSpan.load(this, bf, bsl, spanPage, key, val);
this.next = null;
this.prev = null;
BSkipSpan bss = this;
BSkipSpan<K, V> bss = this;
// findbugs ok (set in load() above)
int np = nextPage;
while(np != 0) {
BSkipSpan temp = bsl.spanHash.get(Integer.valueOf(np));
BSkipSpan<K, V> temp = bsl.spanHash.get(Integer.valueOf(np));
if(temp != null) {
bss.next = temp;
break;
}
bss.next = new BSkipSpan(bf, bsl);
bss.next = new BSkipSpan<K, V>(bf, bsl);
bss.next.next = null;
bss.next.prev = bss;
bss = (BSkipSpan) bss.next;
bss = (BSkipSpan<K, V>) bss.next;
BSkipSpan.load(bss, bf, bsl, np, key, val);
np = bss.nextPage;
@@ -411,15 +414,15 @@ public class BSkipSpan extends SkipSpan {
bss = this;
np = prevPage;
while(np != 0) {
BSkipSpan temp = bsl.spanHash.get(Integer.valueOf(np));
BSkipSpan<K, V> temp = bsl.spanHash.get(Integer.valueOf(np));
if(temp != null) {
bss.prev = temp;
break;
}
bss.prev = new BSkipSpan(bf, bsl);
bss.prev = new BSkipSpan<K, V>(bf, bsl);
bss.prev.next = bss;
bss.prev.prev = null;
bss = (BSkipSpan) bss.prev;
bss = (BSkipSpan<K, V>) bss.prev;
BSkipSpan.load(bss, bf, bsl, np, key, val);
np = bss.prevPage;

View File

@@ -41,9 +41,9 @@ import net.metanotion.util.skiplist.SkipSpan;
If the caller does not iterate all the way through, the last span
will remain in memory.
*/
public class IBSkipIterator extends SkipIterator {
public class IBSkipIterator<K extends Comparable<? super K>, V> extends SkipIterator<K, V> {
public IBSkipIterator(SkipSpan ss, int index) {
public IBSkipIterator(SkipSpan<K, V> ss, int index) {
super(ss, index);
}
@@ -53,8 +53,8 @@ public class IBSkipIterator extends SkipIterator {
* @throws RuntimeException on IOE
*/
@Override
public Object next() {
Object o;
public V next() {
V o;
if(index < ss.nKeys) {
if (ss.vals == null) {
try {
@@ -90,7 +90,7 @@ public class IBSkipIterator extends SkipIterator {
* @throws RuntimeException on IOE
*/
@Override
public Comparable nextKey() {
public K nextKey() {
if(index < ss.nKeys) {
if (ss.keys == null) {
try {
@@ -110,7 +110,7 @@ public class IBSkipIterator extends SkipIterator {
* @throws RuntimeException on IOE
*/
@Override
public Object previous() {
public V previous() {
if(index > 0) {
index--;
} else if(ss.prev != null) {

View File

@@ -54,21 +54,22 @@ import net.i2p.util.Log;
*
* @author zzz
*/
public class IBSkipSpan extends BSkipSpan {
public class IBSkipSpan<K extends Comparable<? super K>, V> extends BSkipSpan<K, V> {
private Comparable firstKey;
private K firstKey;
@Override
public SkipSpan newInstance(SkipList sl) {
@SuppressWarnings("unchecked")
public SkipSpan<K, V> newInstance(SkipList<K, V> sl) {
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Splitting page " + this.page + " containing " + this.nKeys + '/' + this.spanSize);
try {
int newPage = bf.allocPage();
init(bf, newPage, bf.spanSize);
SkipSpan rv = new IBSkipSpan(bf, (BSkipList) sl, newPage, keySer, valSer);
SkipSpan<K, V> rv = new IBSkipSpan<K, V>(bf, (BSkipList<K, V>) sl, newPage, keySer, valSer);
// this is called after a split, so we need the data arrays initialized
rv.keys = new Comparable[bf.spanSize];
rv.vals = new Object[bf.spanSize];
rv.keys = (K[]) new Comparable[bf.spanSize];
rv.vals = (V[]) new Object[bf.spanSize];
return rv;
} catch (IOException ioe) { throw new RuntimeException("Error creating database page", ioe); }
}
@@ -125,7 +126,7 @@ public class IBSkipSpan extends BSkipSpan {
pageCounter[0] +=4;
byte[] k = new byte[ksz];
curPage = this.bf.readMultiPageData(k, curPage, pageCounter, curNextPage);
this.firstKey = (Comparable) this.keySer.construct(k);
this.firstKey = this.keySer.construct(k);
if (this.firstKey == null) {
bf.log.error("Null deserialized first key in page " + curPage);
repair(1);
@@ -160,7 +161,7 @@ public class IBSkipSpan extends BSkipSpan {
/**
* Linear search through the span in the file for the value.
*/
private Object getData(Comparable key) throws IOException {
private V getData(K key) throws IOException {
seekData();
int curPage = this.page;
int[] curNextPage = new int[1];
@@ -194,7 +195,7 @@ public class IBSkipSpan extends BSkipSpan {
break;
}
//System.out.println("i=" + i + ", Page " + curPage + ", offset " + pageCounter[0] + " ksz " + ksz + " vsz " + vsz);
Comparable ckey = (Comparable) this.keySer.construct(k);
K ckey = this.keySer.construct(k);
if (ckey == null) {
// skip the value and keep going
curPage = this.bf.skipMultiPageBytes(vsz, curPage, pageCounter, curNextPage);
@@ -213,7 +214,7 @@ public class IBSkipSpan extends BSkipSpan {
lostEntries(i, curPage);
break;
}
Object rv = this.valSer.construct(v);
V rv = this.valSer.construct(v);
if (rv == null) {
bf.log.error("Null deserialized value in entry " + i + " page " + curPage +
" key=" + ckey);
@@ -252,11 +253,11 @@ public class IBSkipSpan extends BSkipSpan {
*****/
}
private IBSkipSpan(BlockFile bf, BSkipList bsl) {
private IBSkipSpan(BlockFile bf, BSkipList<K, V> bsl) {
super(bf, bsl);
}
public IBSkipSpan(BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
public IBSkipSpan(BlockFile bf, BSkipList<K, V> bsl, int spanPage, Serializer<K> key, Serializer<V> val) throws IOException {
super(bf, bsl);
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("New ibss page " + spanPage);
@@ -265,24 +266,24 @@ public class IBSkipSpan extends BSkipSpan {
this.next = null;
this.prev = null;
IBSkipSpan bss = this;
IBSkipSpan temp;
IBSkipSpan<K, V> bss = this;
IBSkipSpan<K, V> temp;
int np = nextPage;
while(np != 0) {
temp = (IBSkipSpan) bsl.spanHash.get(Integer.valueOf(np));
temp = (IBSkipSpan<K, V>) bsl.spanHash.get(Integer.valueOf(np));
if(temp != null) {
bss.next = temp;
break;
}
bss.next = new IBSkipSpan(bf, bsl);
bss.next = new IBSkipSpan<K, V>(bf, bsl);
bss.next.next = null;
bss.next.prev = bss;
Comparable previousFirstKey = bss.firstKey;
bss = (IBSkipSpan) bss.next;
K previousFirstKey = bss.firstKey;
bss = (IBSkipSpan<K, V>) bss.next;
BSkipSpan.loadInit(bss, bf, bsl, np, key, val);
bss.loadFirstKey();
Comparable nextFirstKey = bss.firstKey;
K nextFirstKey = bss.firstKey;
if (previousFirstKey == null || nextFirstKey == null ||
previousFirstKey.compareTo(nextFirstKey) >= 0) {
// TODO remove, but if we are at the bottom of a level
@@ -299,20 +300,20 @@ public class IBSkipSpan extends BSkipSpan {
bss = this;
np = prevPage;
while(np != 0) {
temp = (IBSkipSpan) bsl.spanHash.get(Integer.valueOf(np));
temp = (IBSkipSpan<K, V>) bsl.spanHash.get(Integer.valueOf(np));
if(temp != null) {
bss.prev = temp;
break;
}
bss.prev = new IBSkipSpan(bf, bsl);
bss.prev = new IBSkipSpan<K, V>(bf, bsl);
bss.prev.next = bss;
bss.prev.prev = null;
Comparable nextFirstKey = bss.firstKey;
bss = (IBSkipSpan) bss.prev;
K nextFirstKey = bss.firstKey;
bss = (IBSkipSpan<K, V>) bss.prev;
BSkipSpan.loadInit(bss, bf, bsl, np, key, val);
bss.loadFirstKey();
Comparable previousFirstKey = bss.firstKey;
K previousFirstKey = bss.firstKey;
if (previousFirstKey == null || nextFirstKey == null ||
previousFirstKey.compareTo(nextFirstKey) >= 0) {
// TODO remove, but if we are at the bottom of a level
@@ -330,7 +331,7 @@ public class IBSkipSpan extends BSkipSpan {
* Does not call super, we always store first key here
*/
@Override
public Comparable firstKey() {
public K firstKey() {
return this.firstKey;
}
@@ -339,13 +340,13 @@ public class IBSkipSpan extends BSkipSpan {
* This is called only via SkipList.find()
*/
@Override
public SkipSpan getSpan(Comparable key, int[] search) {
public SkipSpan<K, V> getSpan(K key, int[] search) {
try {
seekAndLoadData();
} catch (IOException ioe) {
throw new RuntimeException("Error reading database", ioe);
}
SkipSpan rv = super.getSpan(key, search);
SkipSpan<K, V> rv = super.getSpan(key, search);
this.keys = null;
this.vals = null;
return rv;
@@ -355,7 +356,7 @@ public class IBSkipSpan extends BSkipSpan {
* Linear search if in file, Binary search if in memory
*/
@Override
public Object get(Comparable key) {
public V get(K key) {
try {
if (nKeys == 0) { return null; }
if (this.next != null && this.next.firstKey().compareTo(key) <= 0)
@@ -370,13 +371,13 @@ public class IBSkipSpan extends BSkipSpan {
* Load whole span from file, do the operation, flush out, then null out in-memory data again.
*/
@Override
public SkipSpan put(Comparable key, Object val, SkipList sl) {
public SkipSpan<K, V> put(K key, V val, SkipList<K, V> sl) {
try {
seekAndLoadData();
} catch (IOException ioe) {
throw new RuntimeException("Error reading database", ioe);
}
SkipSpan rv = super.put(key, val, sl);
SkipSpan<K, V> rv = super.put(key, val, sl);
// flush() nulls out the data
return rv;
}
@@ -385,7 +386,7 @@ public class IBSkipSpan extends BSkipSpan {
* Load whole span from file, do the operation, flush out, then null out in-memory data again.
*/
@Override
public Object[] remove(Comparable key, SkipList sl) {
public Object[] remove(K key, SkipList<K, V> sl) {
if (bf.log.shouldLog(Log.DEBUG))
bf.log.debug("Remove " + key + " in " + this);
if (nKeys <= 0)

View File

@@ -35,11 +35,11 @@ import net.metanotion.io.Serializer;
* Will never return null.
* Added by I2P.
*/
public class IdentityBytes implements Serializer {
public class IdentityBytes implements Serializer<byte[]> {
/** @return byte[] */
public byte[] getBytes(Object o) { return (byte[])o; }
public byte[] getBytes(byte[] o) { return o; }
/** @return b */
public Object construct(byte[] b) { return b; }
public byte[] construct(byte[] b) { return b; }
}

View File

@@ -30,10 +30,10 @@ package net.metanotion.io.data;
import net.metanotion.io.Serializer;
public class IntBytes implements Serializer {
public byte[] getBytes(Object o) {
public class IntBytes implements Serializer<Integer> {
public byte[] getBytes(Integer o) {
byte[] b = new byte[4];
int v = ((Integer) o).intValue();
int v = o.intValue();
b[0] = (byte)(0xff & (v >> 24));
b[1] = (byte)(0xff & (v >> 16));
b[2] = (byte)(0xff & (v >> 8));
@@ -41,7 +41,7 @@ public class IntBytes implements Serializer {
return b;
}
public Object construct(byte[] b) {
public Integer construct(byte[] b) {
int v = (((b[0] & 0xff) << 24) |
((b[1] & 0xff) << 16) |
((b[2] & 0xff) << 8) |

View File

@@ -32,14 +32,14 @@ import java.io.UnsupportedEncodingException;
import net.metanotion.io.Serializer;
public class StringBytes implements Serializer {
public byte[] getBytes(Object o) {
public class StringBytes implements Serializer<String> {
public byte[] getBytes(String o) {
try {
return ((String) o).getBytes("US-ASCII");
return o.getBytes("US-ASCII");
} catch (UnsupportedEncodingException uee) { throw new Error("Unsupported Encoding"); }
}
public Object construct(byte[] b) {
public String construct(byte[] b) {
try {
return new String(b, "US-ASCII");
} catch (UnsupportedEncodingException uee) { throw new Error("Unsupported Encoding"); }

View File

@@ -35,14 +35,14 @@ import net.metanotion.io.Serializer;
/**
* Added by I2P
*/
public class UTF8StringBytes implements Serializer {
public byte[] getBytes(Object o) {
public class UTF8StringBytes implements Serializer<String> {
public byte[] getBytes(String o) {
try {
return ((String) o).getBytes("UTF-8");
return o.getBytes("UTF-8");
} catch (UnsupportedEncodingException uee) { throw new Error("Unsupported Encoding"); }
}
public Object construct(byte[] b) {
public String construct(byte[] b) {
try {
return new String(b, "UTF-8");
} catch (UnsupportedEncodingException uee) { throw new Error("Unsupported Encoding"); }

View File

@@ -39,12 +39,13 @@ import java.util.NoSuchElementException;
To be clear, this is an iterator through the values.
To get the key, call nextKey() BEFORE calling next().
*/
public class SkipIterator implements ListIterator {
protected SkipSpan ss;
public class SkipIterator<K extends Comparable<? super K>, V> implements ListIterator<V> {
protected SkipSpan<K, V> ss;
protected int index;
protected SkipIterator() { }
public SkipIterator(SkipSpan ss, int index) {
public SkipIterator(SkipSpan<K, V> ss, int index) {
if(ss==null) { throw new NullPointerException(); }
this.ss = ss;
this.index = index;
@@ -59,8 +60,8 @@ public class SkipIterator implements ListIterator {
* @return the next value, and advances the index
* @throws NoSuchElementException
*/
public Object next() {
Object o;
public V next() {
V o;
if(index < ss.nKeys) {
o = ss.vals[index];
} else {
@@ -83,7 +84,7 @@ public class SkipIterator implements ListIterator {
* @return the key for which the value will be returned in the subsequent call to next()
* @throws NoSuchElementException
*/
public Comparable nextKey() {
public K nextKey() {
if(index < ss.nKeys) { return ss.keys[index]; }
throw new NoSuchElementException();
}
@@ -98,7 +99,7 @@ public class SkipIterator implements ListIterator {
* @return the previous value, and decrements the index
* @throws NoSuchElementException
*/
public Object previous() {
public V previous() {
if(index > 0) {
index--;
} else if(ss.prev != null) {
@@ -111,9 +112,9 @@ public class SkipIterator implements ListIterator {
// Optional methods
public void add(Object o) { throw new UnsupportedOperationException(); }
public void add(V o) { throw new UnsupportedOperationException(); }
public void remove() { throw new UnsupportedOperationException(); }
public void set(Object o) { throw new UnsupportedOperationException(); }
public void set(V o) { throw new UnsupportedOperationException(); }
public int nextIndex() { throw new UnsupportedOperationException(); }
public int previousIndex() { throw new UnsupportedOperationException(); }

View File

@@ -35,7 +35,7 @@ import net.metanotion.io.block.BlockFile;
import net.i2p.I2PAppContext;
import net.i2p.util.Log;
public class SkipLevels implements Flushable {
public class SkipLevels<K extends Comparable<? super K>, V> implements Flushable {
/** We can't have more than 2**32 pages */
public static final int MAX_SIZE = 32;
@@ -45,12 +45,15 @@ public class SkipLevels implements Flushable {
* The "bottom" level is the direct pointer to a SkipSpan.
*/
// levels is almost final
public SkipLevels[] levels;
public SkipLevels<K, V>[] levels;
// bottom is final
public SkipSpan bottom;
public SkipSpan<K, V> bottom;
private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(BlockFile.class);
public SkipLevels newInstance(int levels, SkipSpan ss, SkipList sl) { return new SkipLevels(levels, ss); }
public SkipLevels<K, V> newInstance(int levels, SkipSpan<K, V> ss, SkipList<K, V> sl) {
return new SkipLevels<K, V>(levels, ss);
}
public void killInstance() { }
public void flush() { }
@@ -59,10 +62,11 @@ public class SkipLevels implements Flushable {
/*
* @throws IllegalArgumentException if size too big or too small
*/
public SkipLevels(int size, SkipSpan span) {
@SuppressWarnings("unchecked")
public SkipLevels(int size, SkipSpan<K, V> span) {
if(size < 1 || size > MAX_SIZE)
throw new IllegalArgumentException("Invalid Level Skip size");
levels = new SkipLevels[size];
levels = (SkipLevels<K, V>[]) new SkipLevels[size];
bottom = span;
}
@@ -92,14 +96,14 @@ public class SkipLevels implements Flushable {
return buf.toString();
}
public SkipSpan getEnd() {
public SkipSpan<K, V> getEnd() {
for(int i=(levels.length - 1);i>=0;i--) {
if(levels[i] != null) { return levels[i].getEnd(); }
}
return bottom.getEnd();
}
public SkipSpan getSpan(int start, Comparable key, int[] search) {
public SkipSpan<K, V> getSpan(int start, K key, int[] search) {
for(int i=Math.min(start, levels.length - 1);i>=0;i--) {
if((levels[i] != null) && (levels[i].key().compareTo(key) <= 0)) {
return levels[i].getSpan(i,key,search);
@@ -108,9 +112,9 @@ public class SkipLevels implements Flushable {
return bottom.getSpan(key, search);
}
public Comparable key() { return bottom.firstKey(); }
public K key() { return bottom.firstKey(); }
public Object get(int start, Comparable key) {
public V get(int start, K key) {
for(int i=Math.min(start, levels.length - 1);i>=0;i--) {
if((levels[i] != null) && (levels[i].key().compareTo(key) <= 0)) {
return levels[i].get(i,key);
@@ -126,16 +130,17 @@ public class SkipLevels implements Flushable {
* and the deleted SkipLevels is taller than this SkipLevels.
* rv is null if no object was removed.
*/
public Object[] remove(int start, Comparable key, SkipList sl) {
@SuppressWarnings("unchecked")
public Object[] remove(int start, K key, SkipList<K, V> sl) {
Object[] res = null;
SkipLevels slvls = null;
SkipLevels<K, V> slvls = null;
for(int i = Math.min(start, levels.length - 1); i >= 0; i--) {
if(levels[i] != null) {
int cmp = levels[i].key().compareTo(key);
if((cmp < 0) || ((i==0) && (cmp <= 0))) {
res = levels[i].remove(i, key, sl);
if((res != null) && (res[1] != null)) {
slvls = (SkipLevels) res[1];
slvls = (SkipLevels<K, V>) res[1];
if(levels.length >= slvls.levels.length) {
res[1] = null;
}
@@ -159,7 +164,7 @@ public class SkipLevels implements Flushable {
// if the returned SkipSpan was already copied to us
boolean isFirst = sl.first == bottom;
if (isFirst && levels[0] != null) {
SkipSpan ssres = (SkipSpan)res[1];
SkipSpan<K, V> ssres = (SkipSpan<K, V>)res[1];
if (bottom.firstKey().equals(ssres.firstKey())) {
// bottom copied the next span to itself
if (_log.shouldLog(Log.INFO)) {
@@ -171,7 +176,7 @@ public class SkipLevels implements Flushable {
_log.info("FIXUP TIME");
}
SkipLevels replace = levels[0];
SkipLevels<K, V> replace = levels[0];
for (int i = 0; i < levels.length; i++) {
if (levels[i] == null)
break;
@@ -197,11 +202,11 @@ public class SkipLevels implements Flushable {
if((bottom.nKeys == 0) && (sl.first != bottom)) {
// from debugging other problems
if (res == null) {
_log.warn("WTF killing with no return value " + print());
_log.warn("killing with no return value " + print());
} else if (res[1] == null) {
_log.warn("WTF killing with no return value 1 " + print());
_log.warn("killing with no return value 1 " + print());
} else if (res[1] != this) {
_log.warn("WTF killing with return value not us " + res[1] + ' ' + print());
_log.warn("killing with return value not us " + res[1] + ' ' + print());
}
this.killInstance();
}
@@ -213,12 +218,12 @@ public class SkipLevels implements Flushable {
* and the new level is taller than our level;
* else null if it went in an existing level or the new level is our height or less.
*/
public SkipLevels put(int start, Comparable key, Object val, SkipList sl) {
public SkipLevels<K, V> put(int start, K key, V val, SkipList<K, V> sl) {
boolean modified = false;
for(int i = Math.min(start, levels.length - 1); i >= 0; i--) {
// is key equal to or after the start of the level?
if((levels[i] != null) && (levels[i].key().compareTo(key) <= 0)) {
SkipLevels slvls = levels[i].put(i, key, val, sl);
SkipLevels<K, V> slvls = levels[i].put(i, key, val, sl);
if(slvls != null) {
for (int j = i + 1; j < Math.min(slvls.levels.length, levels.length); j++) {
// he points to where we used to point
@@ -243,11 +248,11 @@ public class SkipLevels implements Flushable {
return null;
}
}
SkipSpan ss = bottom.put(key,val,sl);
SkipSpan<K, V> ss = bottom.put(key,val,sl);
if(ss!=null) {
int height = sl.generateColHeight();
if(height != 0) {
SkipLevels slvls = this.newInstance(height, ss, sl);
SkipLevels<K, V> slvls = this.newInstance(height, ss, sl);
for(int i=0;i<(Math.min(height,levels.length));i++) {
// he points to where we used to point
// and we now point to him
@@ -267,6 +272,6 @@ public class SkipLevels implements Flushable {
}
public boolean blvlck(boolean fix) { return false; }
public boolean blvlck(boolean fix, int width, SkipLevels[] prevLevels) { return false; }
public boolean blvlck(boolean fix, int width, SkipLevels<K, V>[] prevLevels) { return false; }
}

View File

@@ -35,13 +35,13 @@ import net.i2p.util.RandomSource;
//import net.metanotion.io.block.BlockFile;
public class SkipList implements Flushable {
public class SkipList<K extends Comparable<? super K>, V> implements Flushable, Iterable<V> {
/** the probability of each next higher level */
protected static final int P = 2;
private static final int MIN_SLOTS = 4;
// these two are really final
protected SkipSpan first;
protected SkipLevels stack;
protected SkipSpan<K, V> first;
protected SkipLevels<K, V> stack;
// I2P mod
public static final Random rng = RandomSource.getInstance();
@@ -57,8 +57,8 @@ public class SkipList implements Flushable {
public SkipList(int span) {
if(span < 1 || span > SkipSpan.MAX_SIZE)
throw new IllegalArgumentException("Invalid span size");
first = new SkipSpan(span);
stack = new SkipLevels(1, first);
first = new SkipSpan<K, V>(span);
stack = new SkipLevels<K, V>(1, first);
//rng = new Random(System.currentTimeMillis());
}
@@ -95,14 +95,15 @@ public class SkipList implements Flushable {
return max;
}
public void put(Comparable key, Object val) {
@SuppressWarnings("unchecked")
public void put(K key, V val) {
if(key == null) { throw new NullPointerException(); }
if(val == null) { throw new NullPointerException(); }
SkipLevels slvls = stack.put(stack.levels.length - 1, key, val, this);
SkipLevels<K, V> slvls = stack.put(stack.levels.length - 1, key, val, this);
if(slvls != null) {
// grow our stack
//BlockFile.log.info("Top level old hgt " + stack.levels.length + " new hgt " + slvls.levels.length);
SkipLevels[] levels = new SkipLevels[slvls.levels.length];
SkipLevels<K, V>[] levels = (SkipLevels<K, V>[]) new SkipLevels[slvls.levels.length];
for(int i=0;i < slvls.levels.length; i++) {
if(i < stack.levels.length) {
levels[i] = stack.levels[i];
@@ -116,12 +117,13 @@ public class SkipList implements Flushable {
}
}
public Object remove(Comparable key) {
@SuppressWarnings("unchecked")
public V remove(K key) {
if(key == null) { throw new NullPointerException(); }
Object[] res = stack.remove(stack.levels.length - 1, key, this);
if(res != null) {
if(res[1] != null) {
SkipLevels slvls = (SkipLevels) res[1];
SkipLevels<K, V> slvls = (SkipLevels<K, V>) res[1];
for(int i=0;i < slvls.levels.length; i++) {
if(stack.levels[i] == slvls) {
stack.levels[i] = slvls.levels[i];
@@ -130,7 +132,7 @@ public class SkipList implements Flushable {
stack.flush();
}
flush();
return res[0];
return (V) res[0];
}
return null;
}
@@ -149,34 +151,36 @@ public class SkipList implements Flushable {
* dumps all the data
* @deprecated goes to System.out
*/
@Deprecated
public void print() {
System.out.println("List size " + size);
System.out.println(first.print());
}
public Object get(Comparable key) {
public V get(K key) {
if(key == null) { throw new NullPointerException(); }
return stack.get(stack.levels.length - 1, key);
}
public SkipIterator iterator() { return new SkipIterator(first, 0); }
public SkipIterator<K, V> iterator() { return new SkipIterator<K, V>(first, 0); }
public SkipIterator min() { return new SkipIterator(first, 0); }
/****
public SkipIterator<K, V> min() { return new SkipIterator<K, V>(first, 0); }
public SkipIterator max() {
SkipSpan ss = stack.getEnd();
return new SkipIterator(ss, ss.nKeys - 1);
public SkipIterator<K, V> max() {
SkipSpan<K, V> ss = stack.getEnd();
return new SkipIterator<K, V>(ss, ss.nKeys - 1);
}
****/
/** @return an iterator where nextKey() is the first one greater than or equal to 'key' */
public SkipIterator find(Comparable key) {
public SkipIterator<K, V> find(K key) {
int[] search = new int[1];
SkipSpan ss = stack.getSpan(stack.levels.length - 1, key, search);
SkipSpan<K, V> ss = stack.getSpan(stack.levels.length - 1, key, search);
if(search[0] < 0) { search[0] = -1 * (search[0] + 1); }
return new SkipIterator(ss, search[0]);
return new SkipIterator<K, V>(ss, search[0]);
}
// Levels adjusted to guarantee O(log n) search
// This is expensive proportional to the number of spans.
public void balance() {

View File

@@ -32,16 +32,16 @@ import java.io.Flushable;
//import net.metanotion.io.block.BlockFile;
public class SkipSpan implements Flushable {
public class SkipSpan<K extends Comparable<? super K>, V> implements Flushable {
/** This is actually limited by BlockFile.spanSize which is much smaller */
public static final int MAX_SIZE = 256;
public int nKeys = 0;
public Comparable[] keys;
public Object[] vals;
public SkipSpan next, prev;
public K[] keys;
public V[] vals;
public SkipSpan<K, V> next, prev;
public SkipSpan newInstance(SkipList sl) { return new SkipSpan(keys.length); }
public SkipSpan<K, V> newInstance(SkipList<K, V> sl) { return new SkipSpan<K, V>(keys.length); }
public void killInstance() { }
public void flush() { }
@@ -50,11 +50,12 @@ public class SkipSpan implements Flushable {
/*
* @throws IllegalArgumentException if size too big or too small
*/
@SuppressWarnings("unchecked")
public SkipSpan(int size) {
if(size < 1 || size > MAX_SIZE)
throw new IllegalArgumentException("Invalid span size " + size);
keys = new Comparable[size];
vals = new Object[size];
keys = (K[]) new Comparable[size];
vals = (V[]) new Object[size];
}
/** dumps all the data from here to the end */
@@ -70,7 +71,7 @@ public class SkipSpan implements Flushable {
return buf.toString();
}
private int binarySearch(Comparable key) {
private int binarySearch(K key) {
int high = nKeys - 1;
int low = 0;
int cur;
@@ -89,12 +90,12 @@ public class SkipSpan implements Flushable {
return (-1 * (low + 1));
}
public SkipSpan getEnd() {
public SkipSpan<K, V> getEnd() {
if(next == null) { return this; }
return next.getEnd();
}
public SkipSpan getSpan(Comparable key, int[] search) {
public SkipSpan<K, V> getSpan(K key, int[] search) {
if(nKeys == 0) {
search[0] = -1;
return this;
@@ -111,7 +112,7 @@ public class SkipSpan implements Flushable {
return this;
}
public Object get(Comparable key) {
public V get(K key) {
if(nKeys == 0) { return null; }
if(keys[nKeys - 1].compareTo(key) < 0) {
if(next == null) { return null; }
@@ -138,8 +139,8 @@ public class SkipSpan implements Flushable {
nKeys++;
}
private void split(int loc, Comparable key, Object val, SkipList sl) {
SkipSpan right = newInstance(sl);
private void split(int loc, K key, V val, SkipList<K, V> sl) {
SkipSpan<K, V> right = newInstance(sl);
if(this.next != null) { this.next.prev = right; }
right.next = this.next;
@@ -175,7 +176,7 @@ public class SkipSpan implements Flushable {
/**
* @return the new span if it caused a split, else null if it went in this span
*/
private SkipSpan insert(int loc, Comparable key, Object val, SkipList sl) {
private SkipSpan<K, V> insert(int loc, K key, V val, SkipList<K, V> sl) {
sl.addItem();
if(nKeys == keys.length) {
// split.
@@ -193,7 +194,7 @@ public class SkipSpan implements Flushable {
/**
* @return the new span if it caused a split, else null if it went in an existing span
*/
public SkipSpan put(Comparable key, Object val, SkipList sl) {
public SkipSpan<K, V> put(K key, V val, SkipList<K, V> sl) {
if(nKeys == 0) {
sl.addItem();
keys[0] = key;
@@ -246,7 +247,7 @@ public class SkipSpan implements Flushable {
* rv[1] is the deleted SkipSpan if the removed object was the last in the SkipSpan.
* rv is null if no object was removed.
*/
public Object[] remove(Comparable key, SkipList sl) {
public Object[] remove(K key, SkipList<K, V> sl) {
if(nKeys == 0) { return null; }
if(keys[nKeys - 1].compareTo(key) < 0) {
if(next == null) { return null; }
@@ -270,7 +271,7 @@ public class SkipSpan implements Flushable {
nKeys = next.nKeys;
//BlockFile.log.error("Killing next span " + next + ") and copying to this span " + this + " in remove of " + key);
// Make us point to next.next and him point back to us
SkipSpan nn = next.next;
SkipSpan<K, V> nn = next.next;
next.killInstance();
if (nn != null) {
nn.prev = this;
@@ -311,7 +312,7 @@ public class SkipSpan implements Flushable {
}
/** I2P */
public Comparable firstKey() {
public K firstKey() {
return keys[0];
}
}

View File

@@ -1,4 +1,4 @@
package net.i2p.client.naming;
package net.i2p.router.naming;
import junit.framework.TestCase;

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"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>
<init-param>
<param-name>home</param-name>
<param-value>./addressbook</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>addressbook</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- this webapp doesn't actually use sessions or cookies -->
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
</session-config>
</web-app>

14
apps/admin/admin.iml Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core" />
<orderEntry type="module" module-name="router" />
<orderEntry type="module" module-name="routerconsole" />
</component>
</module>

View File

@@ -11,9 +11,10 @@ import java.util.Iterator;
import java.util.Set;
import net.i2p.data.Hash;
import net.i2p.data.DataHelper
import net.i2p.data.DataHelper;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.web.StatsGenerator;
import net.i2p.util.I2PThread;
import net.i2p.util.Log;
@@ -49,7 +50,7 @@ class AdminRunner implements Runnable {
} else if ( (command.indexOf("routerStats.html") >= 0) || (command.indexOf("oldstats.jsp") >= 0) ) {
try {
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
_generator.generateStatsPage(new OutputStreamWriter(out));
_generator.generateStatsPage(new OutputStreamWriter(out), true);
out.close();
} catch (IOException ioe) {
if (_log.shouldLog(Log.WARN))
@@ -63,7 +64,8 @@ class AdminRunner implements Runnable {
} else if (true || command.indexOf("routerConsole.html") > 0) {
try {
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
_context.router().renderStatusHTML(new OutputStreamWriter(out));
// TODO Not technically the same as router().renderStatusHTML() was
_context.routerAppManager().renderStatusHTML(new OutputStreamWriter(out));
out.close();
} catch (IOException ioe) {
if (_log.shouldLog(Log.WARN))

View File

@@ -5,10 +5,9 @@
<property name="build" value="build"/>
<property name="dist" location="dist"/>
<property name="jar" value="desktopgui.jar"/>
<property name="resources" value="resources"/>
<property name="javadoc" value="javadoc"/>
<property name="javadoc" value="javadoc"/>
<property name="javac.compilerargs" value=""/>
<property name="javac.version" value="1.6" />
<property name="javac.version" value="1.7" />
<property name="require.gettext" value="true" />
<condition property="no.bundle">
@@ -17,9 +16,8 @@
<target name="init">
<mkdir dir="${build}"/>
<mkdir dir="${build}/${resources}"/>
<mkdir dir="${build}/${javadoc}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${build}/messages-src"/>
<mkdir dir="${dist}"/>
</target>
<target name="clean">
@@ -27,35 +25,36 @@
<delete dir="${dist}"/>
</target>
<target name="compile" depends="init">
<target name="compile" depends="init">
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${src}" destdir="${build}">
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="../../router/java/build/router.jar" />
</classpath>
</javac>
<copy todir="${build}/desktopgui/${resources}">
<fileset dir="${resources}" />
</copy>
</target>
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="../../router/java/build/router.jar" />
</classpath>
</javac>
</target>
<target name="bundle" unless="no.bundle">
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<env key="JAVA_HOME" value="${java.home}" />
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<!-- multi-lang is optional -->
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
<arg value="./bundle-messages.sh" />
</exec>
</target>
<target name="bundle" unless="no.bundle" depends="init">
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<env key="JAVA_HOME" value="${java.home}" />
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
<arg value="./bundle-messages.sh" />
</exec>
<javac source="${javac.version}" target="${javac.version}"
includeAntRuntime="false"
srcdir="${build}/messages-src" destdir="${build}">
<compilerarg line="${javac.compilerargs}" />
</javac>
</target>
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
@@ -74,12 +73,18 @@
<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<jar basedir="${build}" destfile="${dist}/${jar}">
<!-- ideal for linux: 24x24, but transparency doesn't work -->
<copy tofile="${build}/desktopgui/resources/images/logo.png" file="../../installer/resources/themes/console/images/itoopie_xsm.png" />
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_black_24.png" />
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_white_24.png" />
<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
<manifest>
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
<attribute name="Build-Date" value="${build.timestamp}" />
<attribute name="Base-Revision" value="${workspace.version}" />
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
</manifest>
</jar>
</target>

View File

@@ -105,15 +105,40 @@ do
# only generate for non-source language
echo "Generating ${CLASS}_$LG ResourceBundle..."
# convert to class files in build
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
msgfmt -V | grep -q '0\.19'
if [ $? -ne 0 ]
then
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
# slow way
# convert to class files in build
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
if [ $? -ne 0 ]
then
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
else
# fast way
# convert to java files in build/messages-src
TD=build/messages-src-tmp
TDX=$TD/net/i2p/desktopgui
TD2=build/messages-src
TDY=$TD2/net/i2p/desktopgui
rm -rf $TD
mkdir -p $TD $TDY
msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
if [ $? -ne 0 ]
then
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
mv $TDX/messages_$LG.java $TDY
rm -rf $TD
fi
fi
done

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core" />
<orderEntry type="module" module-name="router" />
</component>
</module>

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

View File

@@ -2,55 +2,94 @@
# 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
# foo <foo@bar>, 2009.
#
#
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
msgid ""
msgstr ""
"Project-Id-Version: I2P desktopgui\n"
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-20 11:53+0000\n"
"PO-Revision-Date: 2011-02-26 19:46-0000\n"
"Last-Translator: hamada <hamada@mail.i2p>\n"
"Language: ar\n"
"Language-Team: duck <duck@mail.i2p>\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Arabic (http://www.transifex.com/otf/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=2; plural=(n != 1)\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "ابدأ I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "جاري تشغيل I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "جاري البدأ"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr " تشغيل متصفح I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "اعدادات"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "ألغي"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "اعادة تشغيل"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "توقيف I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "اعدادات الأيقونة"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "هل ترغب في تفعيل الأيقونة؟"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "توقف في مدة {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "إغلاق وشيك"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "الشبكة"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,94 @@
# 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:
# Gabriel Radev <gabosss@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Bulgarian (http://www.transifex.com/otf/I2P/language/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Стартиране на I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P е стартиран!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Стартиране"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Стартиране на I2P Браузер"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Рестартиране на I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Спиране на I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr ""
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,93 @@
# 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:
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Catalan (http://www.transifex.com/otf/I2P/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Iniciar I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P s'està iniciant."
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Iniciant"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Iniciar navegador I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Reiniciar I2P "
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Aturar I2P "
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Xarxa"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -7,49 +7,87 @@
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: 2012-02-12 19:44+0000\n"
"Last-Translator: Waseihou Watashi <waseihou@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.net/projects/p/I2P/language/cs/)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Czech (http://www.transifex.com/otf/I2P/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"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Spustit I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P startuje!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Startuji"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Spouštím I2P Browser"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Nastavuji desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Restart I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Zastavit I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Nastavení ikony na liště (tray icon)"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Zapnout ikonu na liště?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Síť"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -10,9 +10,9 @@ 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: 2016-01-08 07:54+0000\n"
"Last-Translator: Aesthese\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Danish (http://www.transifex.com/otf/I2P/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,38 +20,76 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Start I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P starter!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Starter"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Start I2P Browseren"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Konfigurer desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Deaktivere"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Genstart I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Stop I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Konfiguration af processbar ikonet"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Skal processbar ikonet være aktivt?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Lukker ned om {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Lukker ned om et øjeblik"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Netværk"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -2,54 +2,96 @@
# 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
# foo <foo@bar>, 2009.
#
#
# Translators:
# blabla <blabla@trash-mail.com>, 2011
# Ettore Atalan <atalanttore@googlemail.com>, 2016
# foo <foo@bar>, 2009
# Lars Schimmer <echelon@i2pmail.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 18:07+0000\n"
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"Language-Team: German <>\n"
"Language: de\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: Lars Schimmer <echelon@i2pmail.org>\n"
"Language-Team: German (http://www.transifex.com/otf/I2P/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "I2P starten"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P startet gerade!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Startend"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "I2P-Browser öffnen"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Desktopgui konfigurieren"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "I2P System Tray konfigurieren"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Deaktivieren"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "I2P neustarten"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "I2P beenden"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Systemleistensymbol konfigurieren"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "I2P sofort neustarten"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Systemleistensymbol aktivieren?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "I2P sofort beenden"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Herunterfahren von I2P abbrechen"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Herunterfahren in {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Herunterfahren bevorstehend"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Netzwerk"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Rechtsklick für Menü"

View File

@@ -4,53 +4,91 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# <lixtetrax@grhack.net>, 2012.
# lixtetrax <lixtetrax@grhack.net>, 2012
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: 2012-07-02 11:28+0000\n"
"Last-Translator: lixtetrax <lixtetrax@grhack.net>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/I2P/language/el/)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Greek (http://www.transifex.com/otf/I2P/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Έναρξη Ι2Ρ"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "Το Ι2Ρ ξεκίνησε!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Έναρξη"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Έναρξη φυλλομετρητή Ι2Ρ"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Παραμετροποίηση desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Απενεργοποίηση"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Επανεκκίνηση Ι2Ρ"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Τερματισμός Ι2Ρ"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Παραμετροποίηση εικονιδίου"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Ενεργοποίηση εικονιδίου;"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Σβήσιμο σε {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Επίκειται σβήσιμο"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Δίκτυο "
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P desktopgui\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -18,38 +18,76 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr ""
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr ""
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr ""
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -2,55 +2,96 @@
# 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
# foo <foo@bar>, 2009.
#
#
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# punkibastardo <punkibastardo@gmail.com>, 2011
# strel, 2016
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-04-02 23:57+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: Spanish (Castilian) <None>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: strel\n"
"Language-Team: Spanish (http://www.transifex.com/otf/I2P/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Iniciar I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P está iniciando!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Iniciando"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Lanzar navegador I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configurar desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Configurar la bandeja de sistema de I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Deshabilitar"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Reiniciar I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Detener I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Configuración del ícono de la barra de tareas"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Reiniciar I2P inmediatamente"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "¿Debería estar activado el ícono de la barra de tareas?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Detener I2P inmediatamente"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Cancelar el cierre de I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Cierre en {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Cierre inminente"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Red"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Clic secundario para menú"

View File

@@ -0,0 +1,95 @@
# 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:
# Amir H. Firouzian, 2017
# NoProfile, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: Amir H. Firouzian\n"
"Language-Team: Persian (http://www.transifex.com/otf/I2P/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "شروع I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P راه اندازی شد!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "راه اندازی"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "راه اندازی مرورگر I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "توقف I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr ""
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,95 @@
# 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:
# Jorma Karvonen <karvonen.jorma@gmail.com>, 2015
# outolumo <outolumo@gmail.com>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: outolumo <outolumo@gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/otf/I2P/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Käynnistä I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P on käynnistyy!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Käynnistetään"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Käynnistä I2P-selain"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "I2P tehtäväpalkin asetukset"
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Poista käytöstä"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Käynnistä I2P uudelleen"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Pysäytä I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Käynnistä I2P uudelleen heti"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Pysäytä I2P heti"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Peruuta I2P:n sammutus"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Sammuta {0} kuluttua..."
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Sammutus välittömästi"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Verkko"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Valikko hiiren kakkosnapilla"

View File

@@ -2,59 +2,100 @@
# 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
# Boxoa590, 2013
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# French language coordinator <french.coordinator@rbox.me>, 2017
# French language coordinator <french.coordinator@rbox.me>, 2017
# Boxoa590, 2013
# Towinet, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-09 19:14+0000\n"
"PO-Revision-Date: 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: fr\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-07-04 12:05+0000\n"
"Last-Translator: French language coordinator <french.coordinator@rbox.me>\n"
"Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Démarrer I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P démarre !"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Démarrage"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Lancer le navigateur I2P"
msgstr "Lancer le navigateur d'I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configurer l'interface de bureau"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Configurer la zone de notification d'I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Désactiver"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Redémarrer I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Arrêter I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
msgid "Tray icon configuration"
msgstr "Configuration de l'icône de notification"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Redémarrer I2P immédiatement"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
msgid "Should tray icon be enabled?"
msgstr "Activer l'icône de notification ?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Arrêter I2P immédiatement"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Annuler la fermeture d'I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Fermeture dans {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "La fermeture est imminente"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Réseau"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P : clic droit pour obtenir le menu"

View File

@@ -0,0 +1,94 @@
# 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:
# Uberius Crypto <uberius@anonymail.tech>, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: Uberius Crypto <uberius@anonymail.tech>\n"
"Language-Team: Galician (http://www.transifex.com/otf/I2P/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Iniciar I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P está a se iniciar!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Iniciando"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Lanzar Navegador I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Configurar a Bandexa do Sistema I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Inhabilitar"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Reiniciar I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Deter I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Reiniciar I2P Inmediatamente"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Deter I2P Inmediatamente"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Cancelar Apagado I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Apagar en {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Apagar de contado"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Rede"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Clic co botón dereito para acceder ó menú"

View File

@@ -7,49 +7,87 @@
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: 2012-06-01 16:28+0000\n"
"Last-Translator: AdminLMH <lehetmashogy@i2pmail.org>\n"
"Language-Team: Hungarian (http://www.transifex.net/projects/p/I2P/language/hu/)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Hungarian (http://www.transifex.com/otf/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"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "I2P indítása"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P indul!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "indítás"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "I2P Böngésző Indítása"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Asztali Grafikus Felület Beállítása"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Kikapcsol"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "I2P Újraindítása"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "I2P Leállítása"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Tálcaikon beállítása"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Tálcaikon engedélyezve legyen?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Kikapcsolás: {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Kikapcsolás hamarosan"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Hálózat"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,95 @@
# 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:
# Khairul Agasta <khairuldroids@gmail.com>, 2014
# Robert Dafis <robertdafis@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-07-27 00:14+0000\n"
"Last-Translator: Robert Dafis <robertdafis@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Mulai I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P sudah memulai!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Memulai"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Luncurkan Peramban I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Ubah pengaturan I2P System Tray"
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Matikan"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Mulai ulang I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Hentikan I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Ulang kembali I2P sekarang"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Hentikan I2P sekarang"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Batal tutup I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Mematikan I2P dalam {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "I2P sedang dalam proses dimatikan"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Jaringan"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: klik kanan untuk menampilkan menu"

View File

@@ -4,54 +4,95 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# <bovas85@gmail.com>, 2012.
# <jokjok@hotmail.it>, 2011.
# Leelium <bovas85@gmail.com>, 2012
# mkkid <jokjok@hotmail.it>, 2011
# Leelium <bovas85@gmail.com>, 2012
# mkkid <jokjok@hotmail.it>, 2011
# Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>, 2016-2017
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: 2012-06-01 12:21+0000\n"
"Last-Translator: Leelium <bovas85@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/I2P/language/it/)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-07-30 07:04+0000\n"
"Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
"Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Avvia I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "Avvio di I2P in corso!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Avvio"
msgstr "Avvio in corso"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Avvia il Browser I2P"
msgstr "Lancia il browser I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configura desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Configura icona di I2P nella Barra di notifica"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Disabilita"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Riavvia I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Ferma I2P"
msgstr "Arresta I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Configurazione dell'icona nell'area di notifica"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Riavvia subito I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Vuoi che l'icona nelll'rea di notifica venga abilitata?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Arresta subito I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Annulla arresto di I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Arresto in {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Arresto imminente"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Rete"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Fai click destro per aprire il menu"

View File

@@ -4,53 +4,91 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# plazmism <gomidori@live.jp>, 2013
# タカハシ <indexial@outlook.jp>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2013-11-26 10:38+0000\n"
"Last-Translator: plazmism <gomidori@live.jp>\n"
"Language-Team: Japanese (http://www.transifex.com/projects/p/I2P/language/ja/)\n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Japanese (http://www.transifex.com/otf/I2P/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "I2P を開始"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P 起動中!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "起動中"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "I2P ブラウザを起動"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "desktopgui を設定"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "無効"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "I2P を再起動"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "I2P を停止"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "トレイアイコン設定"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "トレイアイコンを有効にしますか?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "{0} でシャットダウン"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "即時シャットダウン"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "ネットワーク"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,95 @@
# 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:
# HelloKS <kqwe1859@gmail.com>, 2014
# HelloKS <kqwe1859@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: HelloKS <kqwe1859@gmail.com>\n"
"Language-Team: Korean (http://www.transifex.com/otf/I2P/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "I2P 시작"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P 시작중!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "시작중"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "I2P 브라우저 실행"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "I2P 시스템 트레이 설정"
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "비활성화"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "I2P 재시작"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "I2P 정지"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "I2P 즉시 재시작"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "I2P 즉시 정지"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "I2P 종료 취소"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "{0} 안에 종료"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "즉시 종료"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "네트워크"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: 메뉴는 오른쪽 클릭"

View File

@@ -0,0 +1,94 @@
# 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:
# topdog101 <topdog101@free.fr>, 2014
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: zzzi2p\n"
"Language-Team: Malagasy (http://www.transifex.com/otf/I2P/language/mg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: mg\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Velomy i I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "Manomboka ho velona i I2P!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Velona"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Alefaso ny fijerena tranonkala I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Avereno alefa i I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Ajanony i I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr ""
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr ""
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr ""
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr ""

View File

@@ -0,0 +1,95 @@
# 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:
# Allan Nordhøy <epost@anotheragency.no>, 2014
# Allan Nordhøy <epost@anotheragency.no>, 2017
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-07-17 16:52+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "Start I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P starter opp!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Starter opp"
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Kjør I2P-nettleser"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Sett opp I2P systemkruv"
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Skru av"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "Omstart av I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "Stopp I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Umiddelbar omstart av I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Umiddelbar stopp av I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Avbryt nedstenging av I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Skrur av om {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Skru av med en gang"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Nettverk"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "Høyreklikk-meny i I2P"

View File

@@ -2,54 +2,95 @@
# 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
# foo <foo@bar>, 2009.
#
# Translators:
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# Martijn de Boer, 2016
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: http://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-02-20 11:53+0000\n"
"PO-Revision-Date: 2011-02-20 12:15+0000\n"
"Last-Translator: ducki2p <ducki2p@gmail.com>\n"
"Language-Team: Dutch <>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
"PO-Revision-Date: 2017-06-30 21:32+0000\n"
"Last-Translator: Martijn de Boer\n"
"Language-Team: Dutch (http://www.transifex.com/otf/I2P/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"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
msgid "Start I2P"
msgstr "I2P starten"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "I2P is starting!"
msgstr "I2P is aan het starten!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
msgid "Starting"
msgstr "Bezig met starten"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
msgid "Launch I2P Browser"
msgstr "Start I2P Browser"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configureer desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
msgid "Configure I2P System Tray"
msgstr "Configureer I2P systeembalk"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
msgid "Disable"
msgstr "Uitschakelen"
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
msgid "Restart I2P"
msgstr "I2P herstarten"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
msgid "Stop I2P"
msgstr "I2P stoppen"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Systeemvak icoon configuratie"
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
msgid "Restart I2P Immediately"
msgstr "Herstart I2P direct"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Systeemvak icoon inschakelen?"
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
msgid "Stop I2P Immediately"
msgstr "Stop I2P direct"
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
msgid "Cancel I2P Shutdown"
msgstr "Annuleer afsluiten I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
#, java-format
msgid "Shutdown in {0}"
msgstr "Afsluiten in {0}"
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
msgid "Shutdown imminent"
msgstr "Afsluiten op handen"
#. status translations are in the console bundle
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
msgid "Network"
msgstr "Netwerk"
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
#: src/net/i2p/desktopgui/TrayManager.java:63
msgid "I2P: Right-click for menu"
msgstr "I2P: Rechts klikken voor menu"

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