Compare commits

..

2854 Commits

Author SHA1 Message Date
orignal ff8941af71 check if address is still introducer before trying to introduce 1 day ago
orignal f125936b2e try to lookup other introducers' routers if found out doesn't have applicable addresses 3 days ago
Stefan Strogin 697d831441 Support miniupnp-2.2.8 (fixes #2071)
Use UPNP_GetValidIGD for getting external IP.
6 days ago
orignal 457b64f92d try to connect to introducer through any available address 2 weeks ago
orignal 6caec6b551 check if updated router is still introducer. Remove non-introducer sessions from introducers list 2 weeks ago
orignal 362edc68ad removed ls's reseed 2 weeks ago
orignal 29872fc003 check if local address exists 3 weeks ago
orignal 81d383c99e don't pick routers older that 0.9.58 for client tunnels 3 weeks ago
orignal 12653f2fe4 don't try introducer with invalid address. Terminate session immediately if appropriate introducer not found 3 weeks ago
orignal 43f5ba286c update congestion caps before initial publishing 3 weeks ago
orignal f990a2f69f don't reply with relay tag if we are not on introducer on that address 3 weeks ago
orignal 0b97b4294c don't request relay tag for every session if we have enough introducers 3 weeks ago
orignal 4178ac8eac select newest introducers to publish 3 weeks ago
orignal 6a590bf970 use std::mt19937 instead rand() 3 weeks ago
orignal 2f847d62bb fixed typo 3 weeks ago
orignal df6d48dbae request only not found routers from introducers 3 weeks ago
orignal bacce7dc60 fixed introducer's index 3 weeks ago
orignal b3314380cc don't use expired introducer even if we a session with it 3 weeks ago
orignal d4eea61b82 use mt19937 instead rand 3 weeks ago
orignal a1995c13cd flood to 2 next day closest floodfills before UTC midnight 3 weeks ago
orignal bc8adf1433 move unsent I2NP messages to new session if replaced 4 weeks ago
orignal a1322d4667 move unsent I2NP messages to new session if replaced 4 weeks ago
orignal 4100249313 removed bootstrap from floodfill. Removed requested destinations mutex 4 weeks ago
orignal acbd3f897b fixed race condition between local buffer creation and sending it through the transports 1 month ago
orignal 7dc5a04b8d update timestamp for non-reachable router 1 month ago
orignal 03635f4444 publish through tunnels in case of restricted routes 1 month ago
orignal 0fae04f96a update local RouterInfo timestamp by timer even in hidden mode 1 month ago
orignal bb531a878d request newly discovered routers with random intervals after exploratory 1 month ago
orignal 0f7db8e418 list of request callbacks 1 month ago
orignal 9a724b2af9 separate timer for netdb requests cleanup 1 month ago
orignal f4ea6138e8 removed non longer used mutex 1 month ago
orignal e74272781f moved exploratory to netdb requests thread 1 month ago
orignal b75e418879 request destination in netdb requests thread 1 month ago
orignal 927123188c handle onDrop for request message in nedb requests thread 1 month ago
orignal c00eb8cf44 handle requests completions in netdb requests thread 1 month ago
orignal 265bb8b779 handle DatabaseSearchReply in netdb requests thread 1 month ago
orignal e3be409945 moved netdb requests to separate thread 1 month ago
orignal d8707ceb57
Merge pull request #2066 from EKCKABATOP54/fix
Fixed checking the bandwidth flag in the config
1 month ago
orignal 39e16824b9 reset routing path if duplicated SYN received 1 month ago
orignal 285e693a4e fixed deadlock 1 month ago
orignal 940628bf36 update LeaseSet if inbond tunnel failed 1 month ago
orignal b5994e058a increment num attempts if no reply tunnel specified 1 month ago
orignal 22dabfd79e use unordered_map for excluded routers. don't request to self 1 month ago
orignal 0e41c3fa36 resend more interval variance 1 month ago
orignal 124698854f skip resent recently sessions during resend 2 months ago
EKCKABATOP54 f223e668ce Fixed checking the bandwidth flag in the config 2 months ago
orignal f5b823a712 common code for sending netdb lookup 2 months ago
r4sas 4163542125
[gha] short commit hashes for deb packages
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas 6921c8391e
[FS] boost 1.85.0 support
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas 47a2020472
[i18n] update translations
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
orignal 9d38facf3b 2.52.0 2 months ago
r4sas a1be1aa9ec
[gha] cache packages on winxp build
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas c4bbe2bb4a
[win32] fix warning in NetState
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas 601695dede [gha] winxp: rebuild boost
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas cdc81e19a0 [gha] update winxp build
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
orignal b98b3a87b0 fixed race codition between RouterInfo's buffer persist and update 2 months ago
orignal 425ef2cfe5 persist routers in separate thread 2 months ago
orignal c454685605 exclude addresses with wrong keys 2 months ago
orignal c98926abf2 use mt19937 instead rand() 2 months ago
orignal 7aacc97351 initialize requests before reseeds 2 months ago
orignal c49e17ad40 use timestamp to reset rng 2 months ago
orignal 296b721929 shared_ptr for NetdbRequests 2 months ago
orignal d0cf385f4b memory pool for requested destination. Reduced request attaempts to 5 2 months ago
orignal b91f5a7430 fixed race condition on stop 2 months ago
orignal 4d8431907d use std::sample for exploratory selection if C++17 2 months ago
orignal b0cf5130a2 don't try another flloofill if request already exists 2 months ago
orignal 396aa6944d cache complete request for a while and not send the same request again 2 months ago
orignal 8a20d3219b don't build exploratory selection on each request 2 months ago
orignal 13a746162a reduce exploratory selection size 2 months ago
orignal 7e5370fbe5 check for excluded routers during exploratory 2 months ago
orignal ec59308fad return up to 16 hash in expolatory reply 2 months ago
orignal 5ed76b997c log initial destination request 2 months ago
orignal 535fbdb4c9 don't check exporatory too often 2 months ago
orignal 034332a0ef changed minimal exploratory interval to 55 seconds. added variance 2 months ago
orignal a1eac6f28e drop unsolicited database serach replies 2 months ago
orignal ba22a940f1 30 seconds timeout for exploratory requests 2 months ago
orignal 8439f6dc57 don't reply with close than us only floodfills for lookup 2 months ago
orignal a21bec0ed8 check if router if real only if tunnel build rate is low and router's profile is presented when handle exploratory request 2 months ago
orignal 5adbc2c3fe don't stop lookup if number of attempts < 3 2 months ago
orignal c515f49903 removed dependency from boost::thread 2 months ago
orignal 845b14f581 removed dependency from boost::thread 2 months ago
orignal cdfdfc9e24 don't manage netdb is transports are not running 2 months ago
orignal 62d279e1b0 don't return routers with 'f' cap to exploratory request 2 months ago
orignal a1fcd8af39 don't accept too old RouterInfo 2 months ago
orignal 8c6c954ea2 enable previously disabled floodfill 2 months ago
orignal 77bb7432bc insert previously ecluded floodfill back when connected 2 months ago
orignal 720ffa8a31 move traverse thrugh profiles files to deleting thread 2 months ago
orignal c1c69258c3 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 months ago
orignal 733a4a2869 moved save/delete profile disk oprations to separate threads 2 months ago
r4sas ca3ac8c11d
[gha] update actions
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
r4sas d4e3991257
[gha] fix osx build
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 months ago
orignal 648a884a18 use copy of excluded peers 2 months ago
orignal 8fe989050e use share_ptr to store peers 2 months ago
orignal bb6212ccc1 fixed typo 2 months ago
orignal 5f39f65540 mutex for request's excluded peers 2 months ago
orignal 146b3f52c0 check if pool is ready before sending next request 2 months ago
orignal cc75ccd070 don't manage requests if exploratory pool is not ready. use monotonic timer and milliseconds 2 months ago
orignal 0ddc514221 don't send next request if requested destination is over 2 months ago
orignal d3b699d7cd
Merge pull request #2059 from Vort/manage_interval
manage netDb requests more frequently
2 months ago
Vort 6592fab41c manage netDb requests more frequently 2 months ago
orignal 02895d4cf5 respond with confirmied router to exploratory lookup 2 months ago
orignal 8b7941c4ce fixed typo 2 months ago
orignal de673464d1 don't try to connect directy by SSU2 to unnconfirmed router if direct NTCP2 is presented 2 months ago
orignal 6ce2c30522 build client tunnels through confimed routers only if low rate 2 months ago
orignal c5a1e8cac8 give preference to direct connection 2 months ago
orignal f67c38d8d2 fixed typo 2 months ago
orignal 1f1a3270f7 fixed IsPublished for ipv6 2 months ago
orignal ffee29272f avoid two firewalled routers in the row 3 months ago
orignal 2d2469c23d
Merge pull request #2052 from nonlin-lin-chaos-order-etc-etal/openssl
Add fcntl to actually lock pidfile on Android
3 months ago
nonlin-lin-chaos-order-etc-etal 8e80a8b06f Add fcntl to actually lock pidfile on Android 3 months ago
orignal 26fac94d05 delete unused varibale 3 months ago
orignal 9a30068ae5 don't compare OBEP hash twice to check if it's a fresh tunnel 3 months ago
orignal 04bccedd9b
Merge pull request #2048 from Vort/stream_resends
Reset stream RTO if outbound tunnel was changed
3 months ago
Vort b2e21a4f12 increase maximum stream resend attempts to 9 3 months ago
Vort 57e46ba0cf reset stream RTO if outbound tunnel was changed 3 months ago
Vort df3dc1f574 change tunnels during stream resend attempts 5 and 6 3 months ago
r4sas 1b5f67e185
[FS] misc: bump year
Signed-off-by: r4sas <r4sas@i2pmail.org>
3 months ago
r4sas 89064b6fb4
2.51.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
3 months ago
orignal c49dd712de 2.51.0 3 months ago
orignal 4f1cb74f75 request choking delay if too many NACKs. Drop window size to 1 if choking delay received 3 months ago
orignal 75df8d3c7b drop ack Through to last packet if Number of NACKs exceeds 255 3 months ago
orignal 85be76b01a check if LeaseSet was submitted recently. Fixed typo 3 months ago
orignal 835c480269
Merge pull request #2047 from Vort/ssu2_lag
select maximum SSU2 queue size depending on RTT value
3 months ago
Vort ac9d92c681 select maximum SSU2 queue size depending on RTT value 3 months ago
r4sas a30d1972e5
[win] update status code
Signed-off-by: r4sas <r4sas@i2pmail.org>
3 months ago
orignal 0c2330bf14
Merge pull request #2045 from Vort/rtt_sample
streaming improvements
3 months ago
Vort a703d31893 don't double initial RTO 3 months ago
Vort 4f8f3a386f restart stream resend timer after updating initial RTO 3 months ago
Vort 83f0b9c041 extract single RTT sample from stream ACK 3 months ago
Vort cf77be0eeb add lower limit for stream RTO 3 months ago
orignal b2aa34baa6 use C++17 for newer versions of clang for BSD 3 months ago
orignal 4def0b6ea5 use C++17 for newer versions of clang for BSD 3 months ago
orignal 25592a00b6 use C++17 for newer versions of clang for BSD 3 months ago
orignal edaf162f9c
Merge pull request #2044 from Vort/stream_resend_rtt
exclude resent stream packets from RTT calculations
3 months ago
Vort e7ff15c573 exclude resent stream packets from RTT calculations 3 months ago
orignal 161ff3579b don't delete new session with same router hash from sessions-by-hash table 4 months ago
orignal f2085ecc8d fixed warning 4 months ago
orignal 0c5dee69ba
Merge pull request #2043 from Vort/rtt_tune
tune RTT calculations
4 months ago
Vort d74033dd2b tune RTT calculations 4 months ago
orignal 5412e29ff5
Merge pull request #2042 from Vort/ssu2_spikes
lower SSU2 resend traffic spikes
4 months ago
Vort 0236769134 lower SSU2 resend traffic spikes 4 months ago
orignal 530a078535 don't request temination if session was not established 4 months ago
orignal fbca27fe73
Merge pull request #2041 from Vort/i2np_typo
fix typo in message expiration check
4 months ago
Vort 08cc256c54 fix typo in message expiration check 4 months ago
orignal 6432963294
Merge pull request #2037 from vovasty/fs_ios_simulator_fix
fix HashedStorage::Init exceptions in ios simulator.
4 months ago
Vlad Solomenchuk 59beb5e4e4 fix TARGET_OS_SIMULATOR check 4 months ago
orignal 217aa0c882 fixed #2038. don't add comma for missing param 4 months ago
orignal e889dc1508
Merge pull request #2039 from Vort/ssu2_expiration
add expiration for messages in SSU2 send queue
4 months ago
Vort 2d06c0cbe6 add expiration for messages in SSU2 send queue 4 months ago
Vlad Solomenchuk 51446f0324 fix FS::HashedStorage::Init exceptions in ios simulator. 4 months ago
orignal 66d0b7aec4 correct publication verification for encrypted LeaseSet 4 months ago
orignal 92b49fb969 clear excluded floodfills after successive publishing 4 months ago
orignal 17dd5c1285 publish encrypted leaset on floodfill closest to store hash 4 months ago
orignal ce97ec1534
Merge pull request #2036 from Vort/stream_ewma2
changes in stream RTT estimation and window size drop percent
4 months ago
Vort 3ceb64db2e 1. Use EWMA for stream RTT estimation;
2. Drop window size by 10% instead of 50% in case of resend.

Change is based on code by onon.
4 months ago
orignal bb702700f7 don't check session for single tag 4 months ago
orignal ff3fec9a00 remove tag immediately after use 4 months ago
orignal 3873e60cbb try to send database store reply directly to IBGW 4 months ago
orignal 2dbf094433 try to send lookup reply directly to IBGW 4 months ago
orignal e85e96bc35
Merge pull request #2035 from Vort/high_latency_fix
fix high latency threshold
4 months ago
Vort 98543af92b fix high latency threshold 4 months ago
orignal af0d853ccd some cleanup 4 months ago
orignal 20a5e19ea1 don't request banned router 4 months ago
orignal f1058410fb don't request banned router 4 months ago
orignal 6ba42a0912 check if established peer test session has the same address type 4 months ago
orignal 1292ec67c0 check if remote router supports peer test 4 months ago
orignal 2f2f14e3a7 try publishing again after 5 seconds if no tunnels in the pool 4 months ago
orignal edd9dd2c39 try to publish again after 5 seconds if destination is not ready 4 months ago
orignal f8722f17c6 pick peer test session only if Charlie's address supports peer testing 4 months ago
orignal 38cc01e13d check own peer test cap for peer test msg 2 4 months ago
orignal 6ca266ff3b reject peer test msg 2 if peer testing is not supported 4 months ago
orignal b9773c88e4 don't set test failed state to expiring tunnels 4 months ago
orignal 3311fe62bb fixed potential race condition with tunnel tests 4 months ago
orignal a284c85153
Merge pull request #2033 from Vort/ssu2_dynamic_buffer
derive SSU2 socket buffer size from bandwidth limit
4 months ago
Vort e5f75eb61c log would_block error at info level 4 months ago
Vort 89f9bec49a derive SSU2 socket buffer size from bandwidth limit 4 months ago
orignal dbc3952654
Merge pull request #2031 from Vort/buf_size_log
write SSU2 socket buffer sizes to log
4 months ago
Vort f3c052ed0c write SSU2 socket buffer sizes to log 4 months ago
orignal 692f495adc
Merge pull request #2030 from Vort/non_block
enable non-blocking mode for UDP sockets
4 months ago
Vort aa1de7fe94 enable non-blocking mode for UDP sockets 4 months ago
orignal ca45fe73e9 never delete conneted router from netdb 4 months ago
orignal a8af683643 renamed steady to monotonic 4 months ago
orignal b86c83a068 encrypt tunnel tests for ElGamal-only destinations 4 months ago
orignal 6656ef3c8d correct clock for non-encrypted tunnel tests 4 months ago
orignal 6898d04a1d send tunnel test mesaage only if encrypted 4 months ago
orignal 3215125950
Merge pull request #2029 from Vort/tunnel_test_msg
add tunnel test message
4 months ago
Vort 3d03732555 add tunnel test message 4 months ago
Vort d6d440ba8a allow 0ms latency for tunnel 4 months ago
orignal 821a76a7c5 flush IBGW if tunnel build request OBEP is on the same router 4 months ago
r4sas 34154596f2
[gha] build only when related to app and runner itself files are changed, disable temporary msvc
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 months ago
orignal a1dce017f4 allow tunnel endpoint to send tunnel build reply to itself 4 months ago
orignal 78af34237e reduce session termination timeout 4 months ago
orignal 8874ea8033 fixed typo 4 months ago
orignal 6bd1ee36f7 fixed typo 4 months ago
orignal f07c4bd1dd drop transit tunnel if next ident is ours 4 months ago
orignal 8524a67895 fail last tunnel if tunnel quantity is 1 4 months ago
orignal 43d880752e Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 months ago
orignal d4246edb82 don't fail last tunnel 4 months ago
orignal ee8449fa05
Merge pull request #2024 from Vort/congestion_zero_check
add zero check to congestion level calculations
4 months ago
Vort 5415598f60 add zero check to congestion level calculations 4 months ago
orignal 7d73c304b5 Extend transit tunnels limit to 4 bytes. Bump default value to 10K 4 months ago
orignal d25206abce encrypted tunnel test messages 4 months ago
r4sas 5d7c6fb0b3
[gha] msvc: copy openssl libraries to fix build
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 months ago
orignal 36a060d50f Consider 'M' routers as low bandwidth 4 months ago
orignal 577ed56af0 store HTTP and SOCKS proxy as pointer to I2PService 4 months ago
orignal 695dc96a83 common ServiceAcceptor for all stream protocols 4 months ago
orignal e5251bf3c3
Merge pull request #2022 from Vort/bw_time_jumps3
skip bandwidth updates in case of time going backwards
4 months ago
R4SAS 2692aef53d
[gha] update windows msvc action 4 months ago
Vort d524105727 skip bandwidth updates in case of time going backwards 4 months ago
orignal 26463c50fc
Merge pull request #2020 from Vort/select_next_hop2
make more attempts to select not bad hop
4 months ago
Vort b092e712ec make more attempts to select not bad hop 4 months ago
orignal cb8fbb0135
Merge pull request #2018 from Vort/congestion_consts
add constants for congestion levels
4 months ago
Vort 19e23b34da add constants for congestion levels 4 months ago
orignal a4a3f8e96b support upstream proxy through local sockets 4 months ago
orignal f2b720617c
Merge pull request #2016 from Vort/medium_congestion2
implement medium congestion indication
4 months ago
Vort d677d67676 implement medium congestion indication 4 months ago
orignal 7e3157b162 don't process packet in terminated stream 4 months ago
orignal 2b6a95cbee don't check session for symmetric key tagset. re-create tags hash if too many used tags 4 months ago
orignal 900153765a move router's tags cleanup to router's thread 4 months ago
orignal 441e847de8 don't try to decrypt dulpicate message 4 months ago
orignal 6439e227f6 consider test failed state as established. Delete failed tunnels sooner 4 months ago
orignal def404b61a skip failed and expiring tunnels for peer tests 5 months ago
orignal d8be5b8ce1 fixed warning 5 months ago
orignal dddbca6ffb common rng for random shuffle 5 months ago
orignal 56619caa71 random shuffle of tunnels for peer test pairs 5 months ago
orignal 0e502c49b5 show correct tunnel status. restore tunnel if delivery status or data for inbound tunnel received 5 months ago
orignal 710b27688b generic SocketsPipe for different socket types 5 months ago
orignal a9ad6fc31e renamed TCPIPPipe to SocketsPipe 5 months ago
orignal 967627e58a read correct reply length and handle reply codes 5 months ago
orignal 7691a5b4a9 use common SOCK5 code for reseed 5 months ago
orignal d9b6262a6e removed unused field 5 months ago
orignal 075f80aea2 use SOCK5 proxy for upstream 5 months ago
orignal b07530a8a1 don't print error message if operation cancelled 5 months ago
orignal 0ae7931a6f replaced SOCKS4 outproxy by SOCKS5 5 months ago
orignal 158160f5c0 common code for SOCKS5 proxy connectivity 5 months ago
orignal 4cb2ad48be
Merge pull request #2014 from Vort/log_fixes
Logging fixes
5 months ago
Vort adba3987f8 logging fixes 5 months ago
orignal 36dbc15bca keep SSU2 socket open even if failed to bind 5 months ago
orignal d96803a290 always request through tunnels in case of restricted routes 5 months ago
orignal 592d6ae4f4 check log level before calculating base32 or base64 of ident 5 months ago
orignal 7dd9a7a0af added CheckLogLevel 5 months ago
orignal 1b23aa2d7b increase request timeout 5 months ago
orignal f980277552 don't flood failed router 5 months ago
orignal 586695673b correct log message for next netdb request 5 months ago
orignal c158bbe90a send frame when it exceeds 16K 5 months ago
orignal c01fd3299f handle drop of destination publish msg 5 months ago
orignal f64b136f5a remove prestium reseeds 5 months ago
orignal 37e67cbcaa
Merge pull request #2013 from WaxySteelWorm/openssl
reseed.stormycloud.org reseed added
5 months ago
orignal be815804e6 expire transit tunnel is not sent further 5 months ago
orignal ce35637866 handle drop of tunnel build message 5 months ago
StormyCloudInc de2b0f6e09
Update Config.cpp 5 months ago
StormyCloudInc 7b776666a3
Add files via upload 5 months ago
orignal 47578b69c6 handle drop of tunnel test message 5 months ago
orignal 8f28cee32f drop earlier if delayed queue is semi-full 5 months ago
orignal 96cf6ca531 drop earlier if outgoing queue is semi-full 5 months ago
orignal 83cb3a1820 reduce router unreachable interval 5 months ago
orignal ffdd5935e9 Handle drop of own RouterInfo publishing message 5 months ago
orignal 2e9f2d4a3b Drop for LeaseSet request 5 months ago
orignal 0ca782ed71 drop unsent messages if session disconnects 5 months ago
orignal e40b656ecf Drop for tunnel and encrypted messages 5 months ago
orignal 85f5f5b91e fixed potential deadlock 5 months ago
orignal f008478505 handle I2NP messages drops 5 months ago
orignal d926a31064 fixed warning 5 months ago
orignal 822cb35efe limit send Ack timeout by Ack delay interval 5 months ago
orignal faaa8115d9
Merge pull request #2011 from Vort/net_status
log changes of network status
5 months ago
Vort 81015a5228 log changes of network status 5 months ago
orignal a3246cd9dc doen't send Ack packet too often if missing packets 5 months ago
orignal 530c353b00 don't send Ack with NACK immediately but after 2 milliseconds 5 months ago
orignal 75c2cb751f lock mutex before deleting RouterInfo's buffer 5 months ago
orignal 67c4d4bcaa fixed VS build error 5 months ago
orignal 25e82105b2
Merge pull request #2010 from wekoq/udp-tunnels-dest
Add support for multiple udp server tunnels on one destionation
5 months ago
weko 4b167fdbaf Update copyright year 5 months ago
weko 5b93558bd0 Add support for multiple udp server tunnels on one destionation 5 months ago
orignal 70639f1139 don't adjust clock if offsets came from same router 5 months ago
orignal c5a1806528 fixed possible deadlock 5 months ago
orignal a2249f0a82 identify server tunnel session but from ant to ports 5 months ago
orignal 9f217f8a11 don't send expired I2NP messages 5 months ago
orignal 5e19e361e7 check max frame sizebefore sending 5 months ago
orignal 0b47f65b06 don't remove another NTCP2 session with same address 5 months ago
orignal 140146e433 limit mininal received packet size to 40 bytes 5 months ago
R4SAS b4484c8e8f
[gha] msvc: switch back to boost 1.81.0 5 months ago
orignal 1e5604ed43 check if peer is connected before trying to connect 5 months ago
orignal 39e378a03d check received data size 5 months ago
orignal 7cfcb12c7b don't create peer for unreachable router 5 months ago
orignal 49f4dc53ad try next floodfill for router request on demand 6 months ago
orignal 4afdca090d support multiple RouterInfo request callbacks 6 months ago
orignal d8f6c4a93d correct encryption and path for follow on lookup request 6 months ago
orignal d724948d03
Merge pull request #2007 from Vort/reservedrange2
handle 'reservedrange' param properly
6 months ago
Vort 34d75b08dd handle 'reservedrange' param properly 6 months ago
orignal ca9782dd0d handle 'reservedrange' param properly 6 months ago
orignal 2ad26dd4c9 fixed race condition in ECIESx25519 tags table 6 months ago
orignal 828facab57
Merge pull request #2003 from rex4539/typos
Fix typos
6 months ago
orignal cd087568b5 reply with CANT_REACH_PEER if connect to outselves 6 months ago
R4SAS dfe8b25e5e
[gha] MSVC: remove deletion of installation files 6 months ago
R4SAS 1e9bcd6b8b
[gha] MSVC: Switch to direct Boost and OpenSSL installation 6 months ago
orignal 8bc58daa5a fixed #2004. Check supported crypto 6 months ago
orignal 3b97feb89f 2.50.2 6 months ago
orignal a8135b8d18 2.50.2 6 months ago
orignal 5cf1961fa4 drop updated routers from future 6 months ago
Dimitris Apostolou 577c71b930
Fix typos 6 months ago
orignal c5cab05a6b reset peding time offset if correct time was received 6 months ago
orignal b855c71891 don't adjust clock if time offsets are too different 6 months ago
orignal 21f41a2b2a correct time offset direction 6 months ago
orignal 8319dd6b25 drop exploratory and leaseset lookups for non-floodfill router 6 months ago
orignal d4c47d90cb adjust time offset after second time discrepancy 6 months ago
orignal 302af823a3 fixed race condition with openssl 3.2.0 6 months ago
r4sas 69ee6112b3
[changelog] fix version
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
r4sas 816a58f292
2.50.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
orignal 43e130ee34 reinitialize context before each Sign/Verify call to make it working with openssl 3.2 6 months ago
orignal 8ffc1486a4 test-eddsa added 6 months ago
orignal 0e98dd5c70 use fallback EdDSA implementation with openssl 3.2.0 due to regression in EVP_DigestSign (#23075) 6 months ago
r4sas beffdb9fe1
[apparmor] add profile for docker container
Author: corona@mail.i2p

Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
r4sas 05eda2bc9e
[gha] build docker containers only on specific paths changes
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
r4sas c3429bb1a9
[gha] return freebsd build back
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
r4sas 53c6b10177
[make] get the mistakenly deleted pthread back
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
r4sas c2d7133174
[make] fix windows msys2 build
Signed-off-by: r4sas <r4sas@i2pmail.org>
6 months ago
orignal 9b82265cd8 2.50.0 6 months ago
orignal c802c2deb0 update yggdrasil ressed address 7 months ago
orignal c215f2e8d1 check router for null pointer 7 months ago
orignal d327533b56 close unclaimed acceptors after 3 seconds 7 months ago
orignal 94255ebaf4 STREAM ACCEPT queue 7 months ago
orignal 21259204b1 eliminate send buffer mutex completely 8 months ago
orignal 8d6eb5b6b2 don't lock mutex in AsyncSend 8 months ago
orignal 9632e7ba03 exclude NAT64 ipv6 addresses 8 months ago
Dimitris Apostolou 1a02819187 Remove deprecated bind_at_load from macOS 8 months ago
Fabrice Fontaine 6b33250c59 build/CMakeLists.txt: enable C language
Detection of libatomic is broken since version 2.47.0 and
b7f0d87daf
because C language is not enabled anymore:

-- Looking for __atomic_fetch_add_4 in atomic
-- Looking for __atomic_fetch_add_4 in atomic - not found
CMake Error at cmake_modules/CheckAtomic.cmake:59 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  CMakeLists.txt:54 (include)

Indeed if C language is not enabled, the test will be run with the C++
compiler resulting in the following error:

Building CXX object CMakeFiles/cmTC_03d01.dir/CheckFunctionExists.cxx.o
        /home/fabrice/buildroot/output/host/bin/x86_64-linux-g++ --sysroot=/home/fabrice/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot   -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O1 -g0 -D_FORTIFY_SOURCE=2 -DCHECK_FUNCTION_EXISTS=__atomic_fetch_add_4  -DNDEBUG -o CMakeFiles/cmTC_03d01.dir/CheckFunctionExists.cxx.o -c /home/fabrice/buildroot/output/build/i2pd-2.49.0/build/CMakeFiles/CMakeScratch/TryCompile-NApnv9/CheckFunctionExists.cxx
        <command-line>: error: new declaration ‘char __atomic_fetch_add_4()’ ambiguates built-in declaration ‘unsigned int __atomic_fetch_add_4(volatile void*, unsigned int, int)’ [-fpermissive]

whereas with a C compiler, we'll get:

Building C object CMakeFiles/cmTC_7e47b.dir/CheckFunctionExists.c.o
        /home/fabrice/buildroot/output/host/bin/x86_64-linux-gcc --sysroot=/home/fabrice/buildroot/output/host/x86_64-buildroot-linux-gnu/sysroot   -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O1 -g0 -D_FORTIFY_SOURCE=2 -DCHECK_FUNCTION_EXISTS=__atomic_fetch_add_4  -DNDEBUG -o CMakeFiles/cmTC_7e47b.dir/CheckFunctionExists.c.o -c /home/fabrice/buildroot/output/build/i2pd-2.49.0/build/CMakeFiles/CMakeScratch/TryCompile-e0zFMG/CheckFunctionExists.c
        <command-line>: warning: conflicting types for built-in function ‘__atomic_fetch_add_4’; expected ‘unsigned int(volatile void *, unsigned int,  int)’ [-Wbuiltin-declaration-mismatch]

Fix #1908

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
8 months ago
orignal 083034fa35 send peer tests with random delays 8 months ago
R4SAS 0021501d75
[gha] disable FreeBSD build
Additional info: https://github.com/vmactions/freebsd-vm/issues/74
8 months ago
R4SAS 379be2a29e
[gha] Update FreeBSD build action 8 months ago
orignal a3f62e1d71 check actual distance with router to reduce expiration time 8 months ago
orignal a6ee1e648e recognize trailing padding as part of base64 address 8 months ago
orignal 575268d360 reduce expiration time for low bandwidth and far routers 8 months ago
orignal 69b0bef206 fixed possible invalid pointer when send error response 8 months ago
orignal e1b4feb618 correct base64 check 8 months ago
orignal 3286bdb4a7 verify jump link for valid characters 8 months ago
orignal c8ae15041f
Merge pull request #1980 from freeacetone/openssl
Yggdrasil reseed address replaced by address for 4.X+ version
8 months ago
acetone e090b9052a
Yggdrasil reseed address replaced by address for 4.X+ version 8 months ago
Dex 0ef9c08326 fix manpage typo for ipv4 flag 8 months ago
orignal d04b19d77c don't recalculate badwidth if clock was adjusted too much 8 months ago
orignal 04adc14b76 ls@mail.i2p yggdrasil reseed added 9 months ago
orignal 0dee0609ea
Merge pull request #1972 from Vort/nominmax
Fix MSVC compilation for std::max
9 months ago
Vort 0a519d8072 Fix MSVC compilation for std::max 9 months ago
orignal 0cc91dd2d2 don't pick too active peer 9 months ago
orignal 606e35eec1 reseed.us.prestium.org reseed added 9 months ago
orignal e926b0392f reseed.is.prestium.org reseed added 9 months ago
orignal 9980bfa0e7
Update README.md 9 months ago
orignal efdbe26755 try peer test again if Unknown 9 months ago
orignal bb3ae8f5e4 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 9 months ago
orignal 1e6edf06a2 send already accepting error response 9 months ago
hfsfox 0cf656cd76
Add Haiku OS support (#1970) 9 months ago
r4sas fb420bb563
[cpu] more builtin version check changes
Signed-off-by: r4sas <r4sas@i2pmail.org>
9 months ago
r4sas 3da5061426
[cpu] Increase GCC version for use of builtin CPU extensions checker
Signed-off-by: r4sas <r4sas@i2pmail.org>
9 months ago
orignal dd32f1ed6d
Merge pull request #1968 from PurpleI2P/cpu
[cpu] use short defines instead of long checks
10 months ago
r4sas 1857f14be8
[cpu] use short defines instead of long checks
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas 9c25a88707
[i18n] update translations
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas c599d65307
[i18n] update translations
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas 4d573f6655
2.49.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
orignal 3a4238729a 2.49.0 10 months ago
orignal df6bb6d9b8 2.49.0 10 months ago
orignal 918aa556ef fixed non-x86 build 10 months ago
r4sas 1e7feae0df
[rpm] remove BuildRequires tabulation
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas 70829ee79e
[rpm] add Fedora ELN support
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas 4ed19c05f6
[cpu] split AES detect for GNU C < 5
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas 4a5e16b994
[cpu] tests with preprocessor
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
r4sas c53ad2012c
[cpu] use cpuid on gcc < 5
Signed-off-by: r4sas <r4sas@i2pmail.org>
10 months ago
R4SAS 7b6aa41ca8
CPU: remove AVX code, switch to __builtin for AES detection (#1959)
* [cpu] remove avx detect and code blocks, try to switch to __builtin
* [cpu] use __builtin_* only on x86 systems
* [cpu] perform check in separate function
* [cpu] set AES definition on MSVC
* update x86 and aes support checks at compile time
* [cmake] update comment about AES on MSVC
10 months ago
జిందం వాఐి 32c5ff23a6
Differentiate cryptocurrency & its associated address (#1951) 10 months ago
orignal c112276eea memory poll for RouterProfile 10 months ago
Chad Fraleigh 662a59d0fd Eliminate additional undefined behavior of bit shifting signed int. 11 months ago
orignal 72919ec076
Merge pull request #1960 from chadf/chacha20-buf-outlen
Fixed buf offset EVP_EncryptFinal_ex() to include outlen.
11 months ago
Chad Fraleigh 627b8dca83
Fixed buf offset EVP_EncryptFinal_ex() to include outlen. 11 months ago
orignal 7bcc905f05 exclude SSU1 introducers 11 months ago
orignal 8447822c35 don't publish intrducers with zero tag 11 months ago
orignal 411063e3b5
Merge pull request #1958 from Vort/session_log
improve transport session logging
11 months ago
Vort 9bac680f2a improve transport session logging 11 months ago
orignal 38795a41cb don't publish introducers with zero iTag 11 months ago
orignal e170c39dfc
Merge pull request #1957 from Vort/peer_test
Separate test status from network status
11 months ago
Vort 68f4961f1a separate test status from network status 11 months ago
orignal ae5239de43 remove introducer from RouterInfo after 60 minutes 11 months ago
orignal 2064504cce fixed send keepalive for existing session 11 months ago
orignal 4aa631c33f clear implied list if no more introducers found 11 months ago
orignal d6834d6a9a keep non-published, but not-expired introducers in the introducers list 11 months ago
orignal 413e25f20e don't pick too old session for introducer 11 months ago
orignal b8e19bf5f1 reduced peer test interval and added peer test interval variance 11 months ago
orignal c7efd465fa padding for path response 11 months ago
orignal 6e9a3422e9 correct min size for keepalive 11 months ago
orignal d3cd8517b7
Merge pull request #1952 from Vort/explicit0hops
allow 0 hops with explicitPeers
12 months ago
Vort f13cc0b862 allow 0 hops with explicitPeers 12 months ago
orignal 0754255c1f drop incoming session from too old or from future routers 12 months ago
orignal 902899ae24 don't pick completely unreachable peers 12 months ago
orignal c620fc1232 clear unreachable flag upon succesive connect 12 months ago
orignal e7157cf15e don't create paired inbound tunnel if length is different 12 months ago
r4sas 940a97db11
[gha] fix msvc build
Signed-off-by: r4sas <r4sas@i2pmail.org>
12 months ago
orignal 8e63f8f333 consider all addresses non published for U and H routers 12 months ago
orignal 5e97b54d1b
Merge pull request #1950 from Vort/term_fix
fix termination block processing and size check
12 months ago
Vort ea7cf1cf69 fix termination block processing and size check 12 months ago
orignal 17c4038c60 select router with ipv4 for endpoint 12 months ago
orignal 5022a9c610
Merge pull request #1948 from chadf/fuzzing-5
Use offset from Identity::signingKey instead of Identity::certificate for key.
12 months ago
orignal ca8ec6286a
Merge pull request #1947 from chadf/fuzzing-4
Eliminate undefined behavior of bit shifting signed int.
12 months ago
orignal 5142459e12
Merge pull request #1945 from chadf/fuzzing-2
Fixed division by zero due to thread race condition.
12 months ago
orignal 8590dbd3d3
Merge pull request #1946 from chadf/fuzzing-3
Fixed crash when Base64ToByteStream() is only given '=' characters.
12 months ago
Chad Fraleigh c4be5f7fdb
Use offset from Identity::signingKey instead of Identity::certificate for key. 12 months ago
Chad Fraleigh 47dc5591b9
Eliminate undefined behavior of bit shifting signed int. 12 months ago
Chad Fraleigh 2bb48b4546
Fixed crash when Base64ToByteStream() is only given '=' characters. 12 months ago
Chad Fraleigh 638e9b4d7f
Fixed division by zero due to thread race condition. 12 months ago
orignal b8f998f76a don't delete BOBDestination if used by another BOBSession 12 months ago
orignal 5f43026986 check if local destination is not null 12 months ago
orignal 13f263b791 correct transport comptibility for OBEP in second attempt 1 year ago
orignal 07c529173e send current version of the subnegotiation in user/password response 1 year ago
orignal fee940238a handle SOCK5 authrosation with empty user/password 1 year ago
R4SAS ca02b5d860
debian: add compat patches for previous releases
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
r4sas fba23a4528
i18n: update translations
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas a0795d8534
set server tunnel inport in ClientContext from port (#1936)
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas 03cc6e0524
use uint16_t for ports
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas 3af1f4bc76
Use of 'server' type tunnel port as inport (#1936)
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
orignal 52b2d6c393 2.48.0 1 year ago
orignal bb52056aec correct index for connected transport 1 year ago
r4sas 75aa9f2c0c
i18n: update translation file
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas 4e426727e9
Webconsole: fix output on i2p tunnels, add b32 on dest page
Fixes:
* adding of "Client Destinations" section header when there is no such tunnels
* Print error when destination is not found instead of empty page

Adds:
* Print b32 on destination page

Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas 09f233dbfb
NetDB: ignore LeaseSet store request if not floodfill
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas dfe5df29e1
suppress build warnings on windows
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
AsciiMoth d5ee1f602f
Update dates in license (#1934)
Update copyright timestamp in LICENSE file from 2020 to actual 2023
1 year ago
orignal 86173400d5 don't drop profile of real router too early 1 year ago
r4sas ae439b5385
SSU2: check if socket is opened before sending data, handle network_reset error
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas dc6a42c26f
[contrib] update example config file comments, remove ssu option
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas fdf38f45d9
more debug messages at destinations stop
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas a2726cf206
[cmake] print commit-based version if option is used
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
r4sas e56d243c3f
[win32] suppress fallthrough warning
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
orignal e95fb3ab89 allow user/password authentication 1 year ago
orignal c984f89dfb don't handle unecnrypted DatabaseSearchReply msg if came throug client tunnel 1 year ago
orignal 5a09c11e90
Merge pull request #1927 from wekoq/refactor_TBM_handling
refactor TBM hadling
1 year ago
weko d44be2fd73 fix typo 1 year ago
weko a158647153 refactor TBM hadling 1 year ago
orignal 623c3f4605 check for max number of records in tunnel build and tunnel build reply messages 1 year ago
orignal 8a52295882 make router real upon successive outgoing NTCP2 session. Eliminate static keys table 1 year ago
orignal f2bc2598dc
Merge pull request #1925 from wekoq/openssl
Do not save useless peer profiles
1 year ago
weko 1d8a91c5cc redo no save useless profiles 1 year ago
orignal 3bc56ba423 store 'connected' in 'usage' section 1 year ago
orignal e068a3cf22 store 'connected' in 'usage' section 1 year ago
weko 2e2cbe7803 save profile if has connected 1 year ago
weko 1c1452e06b Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 1 year ago
orignal c757b6d020 reset floodfill cap for unknown floodfills 1 year ago
weko 8fcab7b0c1 fix incorrect merge conflict resolve 1 year ago
weko 7646147ed2 save only non-default peer profile 1 year ago
orignal b6de474fda don't include unconfirmed floodfill to the list if we have enough floodfills already 1 year ago
orignal 2f74e670a5 invalidate routers with incorrect family signature 1 year ago
orignal c1168c2aa0 don't catch RouterInfo at OBEP 1 year ago
orignal 1bd6390f78 check if s is x25519 public key 1 year ago
orignal a9e9e14c42
Merge pull request #1921 from contextswap/openssl
limit aes-ni assembly to x86
1 year ago
orignal 19471dbb90
Merge pull request #1922 from SidorKozlov/zombie-config
Configurable minimum successful tunnels
1 year ago
SidorKozlov 3b13a3f2a1 Configurable minimum successful tunnels 1 year ago
orignal 4ce2ef1d83 make router unreachable if AEAD fails in SessionCreated 1 year ago
contextswap 12d0abda55
[
Signed-off-by: contextswap <ctxswp@proton.me>
1 year ago
contextswap 7418f11651
limit aesni inline asm to x86
Signed-off-by: contextswap <ctxswp@proton.me>
1 year ago
orignal fb83ca42f4
Merge pull request #1919 from wekoq/openssl
Recognize invalid static key
1 year ago
weko dab34e9051 get indent hash directly 1 year ago
weko ec2297ed9d Recognize invalid static key 1 year ago
orignal 7c535159bc static keys table 1 year ago
orignal 2af4a2b58d override reply token only if non-zero 1 year ago
orignal ead6a6dca3 correct parsing of caught RouterInfo at IBGW and OBEP 1 year ago
orignal 0ce15ffc91 check for incomplete HTTP header 1 year ago
orignal 76adac31c3 enrcrypt lookup if being sent through a tunnel 1 year ago
r4sas edfcd23b01
[webconsole] added a button to prematurely release a leaseset
Signed-off-by: r4sas <r4sas@i2pmail.org>
1 year ago
orignal f21e1c75d5 check tagset for null 1 year ago
orignal 786c27c8ec publish encrypted RouterInfo 1 year ago
orignal c34df2090c don't reply to DatabaseStore messages extracted from transit 1 year ago
orignal 5769a41208 use unordered_map for LeaseSets 1 year ago
orignal dc265367dc drop unexpected I2NP messages 1 year ago
orignal c22fc75370 set router properties from incoming connections 1 year ago
orignal 6206616347 don't set unreachable twice 1 year ago
orignal 7a12b5ca4b handle incomplete HTTP header lines 1 year ago
orignal b77ae08388 exclude previously non-reachable transports 1 year ago
orignal 527ee3b3c5 check if ident is unrechable only once 1 year ago
orignal cd5bfaabb5 mark and check unreachable ident hashes 1 year ago
orignal e20acb93cf don't lookup streaming destination for each message 1 year ago
orignal 132557f941 don't return default destination if port is specified explicitly 1 year ago
orignal b8d21a1282 create non-default port destination explicitly 1 year ago
orignal 4ebc7c970a bypass medium congestion(D) routers for client tunnels 1 year ago
orignal 572694b141 check routers' congestion before recreating a tunnel 1 year ago
orignal c1f19cb258 fixed typo 1 year ago
orignal caff003a85 check for published ipv4 addresses for floodfills and IBGW 1 year ago
orignal d580c0155a fixed typo 1 year ago
orignal 9475a22728 update introducers. cleanup unreachable routers 1 year ago
orignal e3fb9d8483 fixed warning 1 year ago
orignal 220ef283de rename SendTunnelDataMsg to SendTunnelDataMsgTo for router tunnel delivery types 1 year ago
orignal 8178df752b fixed warning 1 year ago
orignal 922e5915b1 rename SendTunnelDataMsg to SendTunnelDataMsgs for multiple messages 1 year ago
orignal dc6499aa98 fixed warnings 1 year ago
orignal 0c8a80b6f8 fixed warnings 1 year ago
orignal 7c2da75197 don't recreate existing streaming destination 1 year ago
orignal b8032e7fbf publish congestion cap G 1 year ago
orignal b42be2b391
Merge pull request #1910 from wekoq/critical_log_level
Add critical log level
1 year ago
weko a3bdc4ddc1 change some log levels back 1 year ago
weko 2abc997af8 change some log levels back 1 year ago
weko 710a35993d change some log level to error back 1 year ago
weko e36d5634e7 fix log level show in webconsole 1 year ago
weko 354a04f0f6 Up level for some logs to critical 1 year ago
weko a80aeb6715 add critical log level 1 year ago
orignal cd1af85e39 bypass slow transport sessions 1 year ago
orignal 60e648bf9a set cap 6 for unspecified ipv6 address 1 year ago
orignal c45e31b1b2 validate new router 1 year ago
orignal 6d204b4d7b shorter streaming I2NP data messages 1 year ago
ralsei 71bad23906
add dinit service
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
Dimitris Apostolou d91d734b5c Fix typos 1 year ago
orignal 5fee6df87a handle reset in reposnse to SYN 1 year ago
orignal 644d65054d create smaller I2NP packets 1 year ago
orignal f41563a700 check packet number for SessionConfirmed 1 year ago
orignal 32b54fa1f8 handle i2p.streaming.answerPings properly 1 year ago
orignal 084663d6ea mediam size I2NP messages 1 year ago
orignal 55b2f2c625 memory pool for IdentityEx 1 year ago
orignal 5ad9c8e740 create I2NP tunnel message for first fragment 1 year ago
R4SAS e96f0bfb14
[msvc] fix warnings, revert cmake boost libs linking list
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 8677cd54bd
[cmake] win32: do not use static boost libs without WITH_STATIC
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS b97ef1af49
2.47.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 227697c388
[i18n] update translations
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal a6bd8275ca 2.47.0 1 year ago
orignal 6f01ebc0a5 check target destination 1 year ago
orignal 98f06e3ba1
Merge pull request #1889 from polistern/feat/sam-udp-port
Added SAM UDP port parameter
1 year ago
R4SAS b6d1d8117b
[GHA] Windows MSVC workflow (#1904) 1 year ago
R4SAS 7b35c793f3
[reseed] support domains in yggdrasil reseeder, fix IPv6 URL host parsing
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 58ef08310d
[reseed] skip records in reserved IP ranges, check Yggdrasil avalability if domain resolves in ygg address
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal ec5c13a95e add back i2p.novg.net with new certificate 1 year ago
orignal 0a564d153a reseed update 1 year ago
R4SAS 0a8da6bc2f
[cmake] msvc build revision
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 46e4f4aea5 update RouterInfo if congestion cap changed 1 year ago
orignal 6d7f20961f
Merge pull request #1902 from Vort/pool_leak
Prevent leaking of ExploratoryPool
1 year ago
Vort 4b7fcdc719 Prevent leaking of ExploratoryPool 1 year ago
orignal 716926f0d7 publish high congestion cap 1 year ago
orignal 24a14e3440 moved max num transit tunnels to Tunnels 1 year ago
Vort 5470a3a453 Eliminate memory leak in Win32NetState 1 year ago
Sergey Fedorov c02c9c3c24 Makefile.osx: do not use Intel flags on PPC 1 year ago
orignal 3154eda6a6 fixed typos 1 year ago
orignal d50cf0ad83 recognize congestion caps 1 year ago
orignal d6ed9152ee
Merge pull request #1898 from Vort/reseed_fixes
Reseed fixes
1 year ago
Vort a4759694c8 Prevent out of bounds array access 1 year ago
Vort 6610af08c2 Correct processing of reseed.floodfill option 1 year ago
orignal 4db643aa8e limited number of acked packets to 511 1 year ago
orignal 75c9f596b2
Merge pull request #1894 from Vort/remove_reseed
Remove unreachable reseed
1 year ago
Vort 064c013a72 Remove unreachable reseed 1 year ago
orignal 75ab385ab7
Merge pull request #1893 from Vort/warning_fixes
Fix several warnings
1 year ago
Vort 9e0389df1b Fix several warnings 1 year ago
orignal 1b921a2eac removed some SSU1 code 1 year ago
orignal f2729b3efe
Merge pull request #1892 from Vort/msvc_compat
Improve MSVC 2015 compatibility
1 year ago
Vort 231c02c058 Make Win32NetState compatible with MSVC 1 year ago
Vort a199084c99 Add MSVC support to CMake build 1 year ago
Vort 64f0a545fd Improve MSVC 2015 compatibility 1 year ago
Vort 34617bcb44 Code style unification across file 1 year ago
Vort 5f8820d9d6 Silence several compiler warnings 1 year ago
Vort 10dfe39f5f
Fix architecture detection in cmake build (#1890) 1 year ago
R4SAS b7f0d87daf
GHA and Cmake changes (#1888)
Done with Vort's (https://github.com/Vort) cooperation

Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
polistern 3ff1adf597
feat: Added SAM UDP port parameter. 1 year ago
orignal 93d89a1fe0 fixed typo 1 year ago
orignal 3c9a574e90 create io_service after daemonization 1 year ago
orignal de82b3ae19 don't publish non-reachable router 1 year ago
orignal 4b421d3feb publish own RouterInfo in router's thread 1 year ago
orignal f84d88ac63 publish own RouterInfo in router's thread 1 year ago
orignal 2e62f9532f separate thread for processing router's messages 1 year ago
R4SAS 5657079355
[gha] update deb build action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS bd63383d7f
[gha] update deb build action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS db0f2fab11
[gha] update deb build action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS f33b0cad2e
[gha] update deb build action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS e3fbc246f4
[gha] try to fix deb build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal d602ea1061
Merge pull request #1883 from Vort/null_fix
Remove extra null characters from webconsole output
1 year ago
orignal d40cd00cdb use DHT table for floodfills 1 year ago
orignal 692600dfac
Merge pull request #1885 from Vort/null_check
Check for null pointer before dereferencing it
1 year ago
Vort 95cc544c92 Check for null pointer before dereferencing it 1 year ago
orignal 8544283110 don't expire connected routers 1 year ago
orignal abf687ff09 store RouterInfo in DHT 1 year ago
Vort be2629aa5a Remove extra null characters from webconsole output 1 year ago
R4SAS ebee6c5f13
2.46.1-1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 3adff82d4a don't handle ack request for router 1 year ago
R4SAS 200ad5524d
2.46.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 82ac0aa492
2.46.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal b8a99878b6 don't create profile for every new non-floodfill 1 year ago
orignal eaca435a5b find multiple closest hashes 1 year ago
orignal ce05cce331 validate LeaseSet if signature verification was not requested 1 year ago
orignal e190dab7d6 fixed crash when shows leasesets 1 year ago
orignal 289c308600 set proper caps if host is unspecified 1 year ago
orignal bff12b06f4 fixed race condition 1 year ago
orignal b8590075e6 initial commit for Kademlia DHT 1 year ago
R4SAS 1da9e2e1c0
2.46.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS a1fb97cfad
[i18n] update and add Polish, Portuguese, Turkish
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS e53fe2d988
2.46.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 182a721674 2.46.0 1 year ago
barracuda156 00c75a7afa CMakeLists.txt: update comment re Boost and atomics on PPC 1 year ago
barracuda156 385e592045 TargetArch.cmake: fix info re OSX arch support, update copyright year 1 year ago
R4SAS 359781c698
[webconsole] streams table little fix
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS c6c7191682
[debian] exclude parallel flag, remove conffiles
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal fa286a6fb3 faster GetBit 1 year ago
orignal 02a36a9fa8 don't populate buffer of unreachable router 1 year ago
R4SAS 77142e59ee
[http] fix query detection, addresshelper processing, update tests
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 4156900fb5
Merge pull request #1879 from wekoq/no_reversed_ports
Don't use reversed port for choise random port. (by whothefuckami)
1 year ago
weko 76d39cc7c9 changed to tabs, move tor port to function 1 year ago
weko 9e0c5d67c7 Don't use reversed port for choise random port. (by whothefuckami) 1 year ago
orignal 03111ad0df don't save profiles under mutex 1 year ago
orignal abb81c353d fixed race condition 1 year ago
orignal 1ad38c0b95 fixed typo 1 year ago
orignal 532a29b0c4 don't reply with unreachable router 1 year ago
orignal 4f3a416e37 send DateTime together with RouterInfo 1 year ago
orignal 4d0ad47491 GetBit for IdentHash 1 year ago
orignal 7b632bd03d set minimal floodfill version to 0.9.51 1 year ago
orignal c2faa5c614 don't try to save RouterInfo if no buffer 1 year ago
orignal d15581d95e delete invalid router after update 1 year ago
orignal 7bde4de1f5 don't try to save unreachable routers 1 year ago
orignal 88f19f551d don't save RouterInfo buffer if invalid 1 year ago
orignal d79bdc9f66 send datetime block after approximately every 250 packets 1 year ago
orignal 48a3c767e5 in-meory storage for router profiles 1 year ago
R4SAS 86fc12e395
[style] clean code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 3c65012a63
[ssu2] close socket if it was opened on OpenSocket
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 97b7ea0da5 create separate new ipv4 and ipv6 published addresses 1 year ago
orignal 1c4cc02c23 drop garlic message in garlic clove 1 year ago
orignal ac94341203 disconnect established session if clock skew detected 1 year ago
orignal 234540f9e7
Merge pull request #1873 from Vort/ntp_desc
Fix description for nettime.enabled option
1 year ago
Vort cb44a35fde Fix description for nettime.enabled option 1 year ago
orignal 6ac849fe37
Merge pull request #1872 from Vort/log_fix
Fix debug log output
1 year ago
Vort 0829b186b7 Fix debug log output 1 year ago
orignal 993900aa77 terminate sessions if clock was adjusted backwards too much 1 year ago
orignal aac9a8d18f check if clock was adjusted backwards 1 year ago
orignal 2baaa8bb8f fixed typo 1 year ago
orignal f29ef2c057 don't compare first byte for yggdrasil addresses 1 year ago
orignal d1c98c58b9 update status before deleting session 1 year ago
orignal 4930157e93 don't innsert back unreachable router 1 year ago
orignal d30d1e8a7d don't set unrechable for routers without published addresses 1 year ago
orignal 80a55c5b75 store unrechable in profile 1 year ago
orignal 3c02cade58 compare only first 8 bytes for temporary addreses 1 year ago
orignal 21123e2afa compare published address and actual endpoint 1 year ago
orignal f1415c2234 compare published address and actual endpoint 1 year ago
orignal 212a1156a1 filter our addresses with invalid hosts 1 year ago
orignal 54fb234424 limit number of acked packets to 510 1 year ago
orignal 5a6b50ae51 fixed typo 1 year ago
orignal 21542e8150 select first hop from high bandwidth peer for client tunnels 1 year ago
orignal 544fcd147f
Merge pull request #1867 from Vort/sort_transports
Sort transports by IP:port pairs
1 year ago
Vort 9bc3b11b96 Sort transports by IP:port pairs 1 year ago
orignal 02e7f6b0c3 cleanup out of sequence packet nums in one call 1 year ago
orignal f7101cc260 fixed warning 1 year ago
orignal e9f0ed6473 cleanup out-of-sequnce list more aggressivly 1 year ago
orignal 4960587f46 cleanup out-of-sequnce list more aggressivly 1 year ago
orignal bf8eecf407 more attempts to find good peer 1 year ago
orignal 09a1a78bd6
Merge pull request #1865 from wekoq/openssl
Add parameter for show TCSR with old algorithm and it's realization
1 year ago
weko 7df2ed6114 rename and refactor 1 year ago
weko 22b1066b0a Add parameter for show TCSR with old algorithm and it's realization 1 year ago
orignal 89695a7040
Merge pull request #1864 from Vort/ipv6_brackets
enclose IPv6 address in square brackets
1 year ago
Vort 2ed281472f enclose IPv6 address in square brackets 1 year ago
orignal fafdb0c590 drop too long or too short LeaseSet 1 year ago
R4SAS 2a6883e305
[debian] add missing space in changelog (closes #1863) 1 year ago
R4SAS 3cee8bfcb2
Update tests and corresponding makefiles (#1862) 1 year ago
orignal 86dbfdb536 mutex for encrypted LeaseSet update 1 year ago
orignal 70fec2bc99 don't publish localhost addresses in RouterInfo 1 year ago
orignal 8a106eb09e fixed test-http-req 1 year ago
R4SAS f9331897b8
[gha] fix docker manifest merging
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 126ca0209b
[gha] update docker build workflow
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal ad5540c9f3 delete address if corresponding transport is disabled 1 year ago
orignal e91d0bbec8 delete address if corresponding transport is disabled 1 year ago
orignal 8ee461f60a enable all ipv4 adresses even if one is already enabled 1 year ago
orignal 4de6201b84 update RouuterInfo if NTCP2 or SSU2 keys were recreated 1 year ago
orignal 273aa31b1e try another floodfill if it's incompatible with tunnels 1 year ago
R4SAS b31f52e332
[http] keep query even if it was empty (closes #1844)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 4fae7b8d65 don't update local RouterInfo addresses in Load but in InitTransports only 1 year ago
orignal 5479ddd03c publish NTCP2 addreses by index 1 year ago
orignal 1f23584c24 update all SSU2 addresses 1 year ago
orignal 067fb45a25 exclude router from tunnel build for 2.5 minutes if doesn't reply too often 1 year ago
R4SAS ac287a896c
[websonsole] use a function to format the amount of tunnel traffic
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 8baf62eb2c
[websonsole] fix int concatenation with char strings
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS e1ec79daf2
[webconsole] format transit tunnels with table
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal d4426118c5 exclude router from tunnel build for 2.5 minutes if declined 1 year ago
orignal 64fe56aa07
Merge pull request #1854 from Vort/server_forwards_style
use correct style for Server Forwards section
1 year ago
Vort 47eb49c34e use correct style for Server Forwards section 1 year ago
orignal cd6d86c8c3 make sure that async CreateStream complete 1 year ago
R4SAS 84d4e074ce
add loglevel checker, fix fields passing to translated string formatter
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS a0e71c4173
[i18n] update strings and translation file
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 533c8a8a55
[i18n] set decimal point based on language
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS a57ae4dc56
[i18n] add sweedish translation
Translation author: corona@mail.i2p

Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS 88dfe3ca4e
[i18n] fix build on macos
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS d68c7f8ea7
[i18n] fix build on macos
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
R4SAS e8ace998ba
[i18n] add support of string formatting
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal e8be39af17 memrory pool for SSU2IncompleteMessage 1 year ago
orignal 7196db09d6
Merge pull request #1852 from freeacetone/openssl
HTTPProxy message stream correcting and comments
1 year ago
acetone b290ee1aa0 Cfg example: verbose comments for Web Console auth and addresshelper for public proxy 1 year ago
acetone d105ab11af Joining two strings to one and correct comments 1 year ago
orignal bc888167a7 use linked list for out of sequence fragments 1 year ago
R4SAS 6ca6591c43
[make] set PREFIX from DESTDIR if it present
Signed-off-by: R4SAS <r4sas@i2pmail.org>
1 year ago
orignal 36cb707e47
Merge pull request #1849 from freeacetone/openssl
Addresshelper updating: referer check
1 year ago
acetone 013d5ff74f Addresshelper request validation by Refer-header 1 year ago
acetone 9af5a90757
Copyright year updated 1 year ago
acetone d8b6f5438c
log typo 1 year ago
acetone 10030a4e0d Addresshelper updating: referer check 1 year ago
orignal 993dc72ce6 use separate pointer to second fragment of incomplete message 1 year ago
orignal 324ace103b memoery pool for fragments 1 year ago
orignal d530269e4f try to insert received msgid instead lookup 1 year ago
orignal 7146a4dbae check if session socket was closed before tunnels were built 1 year ago
R4SAS f79900653b
Update README.md 1 year ago
orignal f172f44f32
Merge pull request #1833 from TomasGlgg/feature
Использование скользящего среднего для рассчета tunnel creation success rate
1 year ago
orignal f34abe60fa 2.45.1 1 year ago
orignal a3c305032a don't set Firewalled upon SessionCreated if ports mismatch 1 year ago
orignal 2921eaa055 differentiate symmetric and full cone NAT 1 year ago
orignal 1cc68ea402 differentiate symmetric and full cone NAT 1 year ago
orignal c18e8f6c78 drop too long LeaseSet without processing 1 year ago
orignal e59ca8420e temporary change back to C++17 1 year ago
orignal a6f9a56e40 support C++20 1 year ago
R4SAS 4011502f5f
[docker] put config in correct place
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal acd6af709e don't use netdb memory pool for local RouterInfo 2 years ago
orignal 55704ece3a drop duplicated I2NP messages 2 years ago
orignal 0d3ede56cb reject duplicated trnsit tunnel 2 years ago
R4SAS 06fae976b3
[style] update editorconfig
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal e95035c143
Merge pull request #1835 from kleenexi2p/openssl
Fix segfault when UPnP is enabled
2 years ago
kleenex 55be5c74f0
Fix segfault when UPnP is enabled
Added null check.

Signed-off-by: kleenex <kleenex@i2pmail.org>
2 years ago
R4SAS a1c16e129d
[rpm] fix date
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 321c7cb7cf
[docs] note about doubled transit tunnels limit for floodfill mode
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 5f8d45154d
[docs] update transit limit description in config file
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 503f522cc3
[style] clean trailing spaces and tabs
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 22179400c7
2.45.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
Tomas Globis 66f82cb43f
Use moving average to calculate tunnel creation success rate 2 years ago
orignal 1df67bd43c 2.45.0 2 years ago
orignal d5b03f214b double default number of transit tunnels for floodfill 2 years ago
R4SAS cfb773351d
[debian] update packaging files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 6942c20879 don't select overloaded peer 2 years ago
orignal 7b341d5d30 update and show send queue size for transports 2 years ago
R4SAS e93718456f
[debian] update patch series list
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS af838196be
[debian] remove #1210 patch
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS f8ba5b8c63
increase nofile limit in service
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 446bbf6b93
Merge pull request #1812 from barracuda156/tests
Add implementation of tests with CMake, plus a few minor fixes
2 years ago
R4SAS 2c19da9aa7
fix warnings about unused code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 01fc21ffb9
[webconsole] remove newline break
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 3e3e2c41bd unlock mutex for good after wait 2 years ago
orignal cb139226df ilimit umner of simultaneous tunnel build requests per pool 2 years ago
orignal 84d6028454 limit number of message to handle at the time 2 years ago
orignal 126dc0ebe0 inseer incoming session into sessions list 2 years ago
orignal 099d9d977f terminate duplcated session properly 2 years ago
orignal 5a167316cb don't filter yggdrasil address 2 years ago
orignal 85e31f84ec reset termination timer for new incoming connection 2 years ago
orignal edb7a0e23c Refuse dulicated incoming pending session from same IP 2 years ago
R4SAS f401ccf5dd
Merge pull request #1829 from rex4539/typos
Fix typos
2 years ago
Dimitris Apostolou 9f9e8bfa14
Fix typos 2 years ago
R4SAS 61168d5c9d
Merge pull request #1828 from hack3ric/openssl
Fix CheckAtomic.cmake
2 years ago
R4SAS 8500aaa26f
[gha] fix MacOS build
More info: https://github.com/orgs/Homebrew/discussions/3895

Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 445cff0025
add editorconfig
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 99356fd24d make sure that AsycReceive complete 2 years ago
orignal 5ef5f5a170 don't create encryption for new transit tunnel immediately 2 years ago
Eric Long 54b7d4ef32 Fix CheckAtomic.cmake 2 years ago
R4SAS 6376328c98
[http proxy] do not remove X-Requested-With for *HttpRequest (#1816)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal b6f83dfe9f set error before status 2 years ago
orignal 3f728149ab bump default max number of transit tunnels to 5000 2 years ago
orignal 36501fe31e change network status back to OK if port in msg 7 matches 2 years ago
orignal e4ddc883d2 drop future RouterInfo and LeaseSet upon receive 2 years ago
orignal 5ac01ddce8 delete routers with timestmep from future 2 years ago
orignal d3656fcb3f don't publish ::1 2 years ago
orignal d6c101d261 try to handle RelayIntro again is Alice's RouterInfo not found 2 years ago
orignal eeea02d834 rounded to seconds timestamps 2 years ago
R4SAS 0e0cd555eb
[i18n] odd space in localized name
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 5dfe483152
[i18n] add Czech translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS c210553a39
getting rid of old c99 array designators
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS a315e4ce62
more overrides
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 96cfd9acc2
fix override
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS d869bb25ed
fix missing override warning
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 476e6aae35 don't iterate through addresses when it's not necessary 2 years ago
orignal d30ee99cf1 fixed crash 2 years ago
orignal 84d9c8f1b8 access to RouterInfo's addresses by index 2 years ago
orignal df737a65b2 SessionRequest must be min 88 bytes 2 years ago
orignal c5230ca44b don't accept incoming session from invalid endpoint 2 years ago
R4SAS 3471e6fe16
use deadline_timer for bandwidth calculation timer
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS f1437feede
SSU2: handle standard network errors more correctly
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 0d523bd2a6
use 15s average bw for transit limits check
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 8943200ffa
calculate bandwidth every 1 and 15 seconds
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal a902d68669 enable compressible padding 2 years ago
orignal f6ca7c19af allow zero length padding 2 years ago
orignal 3458665df8 don't delete unreachable routers if tunnel creation success rate is too low 2 years ago
orignal 8320987124 delete invalid sessions from peers 2 years ago
orignal 648b09d45f try to restart acceptors after termination of expired NTCP2 if no descriptors 2 years ago
R4SAS 857df5c734
prevent log spamming with no_descriptors error
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 737603e81b No descriptors error 2 years ago
orignal 53ca5dc67a memory pool for address vectors 2 years ago
orignal 8ad5696e50 don't send termination again if termination received block received 2 years ago
R4SAS ef9d27e424
Merge pull request #1816 from jiigen/openssl
Remove "X-Requested-With"
2 years ago
orignal 2bb5ff7184 eliminate RTT self-reduction 2 years ago
orignal 753c7efde8 fixed build error 2 years ago
orignal d0d0cd8445 use shared pointer for RouterInfo's addreses list 2 years ago
orignal 410d2c2fa9 use shared pointer for RouterInfo's addreses list 2 years ago
orignal 6a743f66e8 eliminate RTT self-reduction 2 years ago
orignal 709c451400 disable MemoryPool for RouterInfo's address 2 years ago
orignal cb73c7c72e make sure that only *Mt method can be called for MemoryPoolMt 2 years ago
orignal 50abeea82a print endpoint if more than two fragments of SessionConfirmed 2 years ago
orignal 8db352b4d0 recognize symmetric NAT from peer test msg 7 2 years ago
orignal 6589bdf6b5 delete expired token right away 2 years ago
orignal 1ac171152a don't print error message if incomplete 2 years ago
orignal 629c718527 fixed races condition with pending outgoing sessions 2 years ago
Jigen 519c0fe81d
Remove "X-Requested-With"
When any app uses Android’s WebView to load a web page, WebView attaches an extra header, named X-Requested-With, with the value set to the application ID. 
That include Lightning-I2P browser by R4SAS. 
Google doesn’t want to make it easy to get rid of the X-Requested-With header. However, there is a mechanism for replacing header information. This doesn’t allow a program to stop sending the X-Requested-With header.

More info on: https://www.stoutner.com/the-x-requested-with-header/
2 years ago
R4SAS eb0ef80a17
Merge pull request #1813 from Vort/clang-build-fix3
Clang compatibility improved
2 years ago
Vort 9763499dbe Clang compatibility improved
x86_64-w64-windows-gnu platform should be detected as Windows, not Linux
2 years ago
orignal 949c38f5f0 reuse list of addresses 2 years ago
orignal 2a6f906177 print separate message for introducer timeout 2 years ago
orignal b4c226f4b3 EdDSA blinding test 2 years ago
orignal 64c3282aae check minimal message size 2 years ago
orignal f5d511ae0f
Merge pull request #1811 from rex4539/typos
Fix typos
2 years ago
orignal aa9a9ef18d memory pool for addreses 2 years ago
barracuda156 aa5e6400e4 CMakeLists: use a fix for atomics on macOS PPC, not PPC in general 2 years ago
barracuda156 61bcfebcc8 Add CMake support for tests 2 years ago
Dimitris Apostolou 73b9c0302b
Fix typos 2 years ago
orignal aead9db971 Read local RouterInfo from file 2 years ago
orignal d8230644b2 localizations independant from ClientContext 2 years ago
orignal 97ef908b0c removed SSU and NTCP transports 2 years ago
orignal fb8be32c28 removed SSU and NTCP transports 2 years ago
orignal a298588943 SSU2 only introducers 2 years ago
orignal ccfeca728e use only SSU2 for network status 2 years ago
orignal 7705423c42 remove SSU 2 years ago
orignal 379075c594 exluded SSU from transports 2 years ago
orignal 6a23153c0b don't read SSU addresses 2 years ago
orignal 9e02c99db5 check and limit LeaseSet's buffer size 2 years ago
R4SAS ba3cee1cf1
2.44.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 9f59ff2df4 2.44.0 2 years ago
R4SAS 8df4082d6f
[cmake] Use std::atomic on PowerPC inside boost (#1726)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS cf005821d7
[i18n] pull translation updates
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 39b3996596 added notbob.i2p to jump services 2 years ago
orignal 78357baca4 sync AcceptStream 2 years ago
orignal 85b78dfb9b call stream request callback after CreateStream 2 years ago
orignal 9fd60b52f1 sync StreamCreate 2 years ago
orignal 851be41d0d Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 years ago
orignal c6a6a4e0e8 sync Receive from stream 2 years ago
R4SAS 28aeebd4c7
[gha] switch to another deb build action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal c88638afe4 reconnect to proxy if receive error 2 years ago
Sergey Fedorov 7f98a8b972
Fix definitions for Darwin PPC; do not use pthread_setname_np on unsupported OS versions (#1797)
* Correct define for Darwin PPC is __POWERPC__

* util.cpp: do not use pthread_setname_np on unsupported macOS versions
2 years ago
R4SAS e1e4924592
[gha] update freebsd workflow
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 8299f80ea5 correct assignment of remote address 2 years ago
orignal b8ce0b0838 store Address instead IdentHash for UDP tunnel 2 years ago
orignal e13f151474 ssu2.mtu4 and ssu2.mtu6 2 years ago
orignal 4ed4e8708e close relay socket if associate socket gets closed 2 years ago
orignal 1738d118f7 recconnect to proxy 2 years ago
orignal f1f66d7b8f handle SOCKS connect reply for ipv6 address 2 years ago
orignal 4ed5e44de7 correct buffer size for ipv6 SOCKS proxy reply 2 years ago
orignal 3e3f92c616 set and check proxy status for ipv6 if presented 2 years ago
orignal 5fb1247b87 correct MTU calculation through proxy 2 years ago
orignal 016222463d don't run peer test for SSU2 through proxy 2 years ago
orignal 0e477bf938 set min MTU if through proxy 2 years ago
orignal eb75eb0e55 reset port value before parsing 2 years ago
orignal 2a703e0844 SSU2 through a socks5 proxy 2 years ago
orignal 2b6d9eaa8b disable compressible padding for now 2 years ago
orignal f9b0bb0383 I2PTunnel/UDPTunnel split 2 years ago
orignal c6e8873d57 always compress SYN packet 2 years ago
orignal b2767304e9 correct padding offset 2 years ago
orignal 3d4d3ce80d compressable crypto key and padding for routers and destination 2 years ago
Jigen 01ea1854bc
Update HTTPProxy.cpp (#1794)
Remove DoNotTrack flag from HTTP Request header.
2 years ago
orignal f3aada9e1a Proxy connection and UDP associate request 2 years ago
orignal 08fd32b3bf allow different ports from RelayReponse and HolePunch 2 years ago
orignal 39a86ce5c9 handle UDP packet from proxy relay 2 years ago
orignal fe25260ee2 send UDP request to proxy relay 2 years ago
orignal 63fd05c7d3 SOCKS5 constants 2 years ago
R4SAS 6c2aec8854
[gha] update docker workflow
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal e5553f7528 milliseconds for peer test send time 2 years ago
orignal 6e3cec653d resend PeerTest msg 2 2 years ago
orignal 55976fd9dc resend PeerTest msg 1 2 years ago
orignal bcbd5201e9 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 years ago
orignal c2f91ea63b SSL connection for IRC server tunnel 2 years ago
R4SAS 1d9d89b115
[transports] get addresses on interfaeces before initializing RouterContext
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 798dd8b27b
[HTTP Proxy] skip addresshelper page if destination is not changed (closes #1789)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 3544f77e90 terminate peer session if Charlie's RouterInfo not found 2 years ago
R4SAS 96c4463d39
clean code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 650b7abef6
[SSU2] add log messages about peertest
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 714b3856a2
[SSU2] print to log when peer test is sent
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 6b939eba59 fixed typo 2 years ago
orignal e82662b389 SSL support for server tunnels 2 years ago
R4SAS 8f9dae8556
[webconsole] enable tunnels reload command (closes #1781)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 69ca3bc75d catch lexical_cast exceptions 2 years ago
R4SAS 3945f34e96
[gha] subsequent containers build (#1791) 2 years ago
orignal 549dcbee32 don't set port=1 2 years ago
orignal 0a0c2350f2 random seelection between NTCP2 and SSU2 priority 2 years ago
orignal cef2263a7f Transports priority for peer 2 years ago
R4SAS e338ce7da9
[docker] update dockerfile, add configuration file (#1788)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 638c376e5b enable SSU2 and disable SSU by default 2 years ago
orignal 8eade86624 moved InitTransports code from Daemon to Transports 2 years ago
orignal 24ae8d5443 don't handle more than 2 fragments in SessionConfirmed 2 years ago
orignal 030af11d86 don't merge duppicated fragment of SessionConfirmed 2 years ago
orignal 857a2bc399 verify path response 2 years ago
orignal 09e6e2940f correct max paddign size 2 years ago
orignal 23e18a34d4 check if new address is in reserved range 2 years ago
orignal 3bdef5f58d update remote endpoint and send path challenge 2 years ago
orignal cf27581c76 check min MTU 1280 2 years ago
R4SAS cf41df82e2
[i18n] add spanish translation
Thanks to Liboide

Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 4634bff9f0 limit number of resent packets. Resend interval variance 2 years ago
orignal 1a9c658836 immediate ack request flag 2 years ago
orignal 1a32c55ca3 delete routers with expired SSU2 introducers 2 years ago
R4SAS f4e230f1ad
[i18n] add Italian translation, update Chinese
Thanks for italian translation to Albano Battistella and Fabio Roman

Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 9abc4cf359 fixed crash at startup if addressbook is disbaled 2 years ago
R4SAS c54fc7ee44
[win32] remove reworked error status
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 9df757a3fd fixed warning 2 years ago
orignal 9b5a885b3b check if I2NP message to send is not null 2 years ago
orignal f32b288785 print error on separate line for windows 2 years ago
orignal f378119889 5 SSU2 peer tests if no SSU 2 years ago
orignal 8fd466c5a9 separate network status and errors 2 years ago
orignal 36eddd48c3 move more handlers from I2PControl to I2PControlHandlers 2 years ago
orignal 2470ba76f0 fixed cmake build 2 years ago
orignal d32475440a fixed cmake build 2 years ago
orignal b4d73683d1 spilt to I2PControl and I2PControlHandlers 2 years ago
orignal 95f19a5fb2 send Retry instead SessionCreated if clock skew 2 years ago
orignal f98780b1d7 check timestamp for token request 2 years ago
orignal 150c89e48a don't request session if zero token received 2 years ago
R4SAS c85bf82749
[i18n] pull Chinese translation update
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 63227ab2f1
fix log message
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 5b19237a85 limit HTTP header size 2 years ago
orignal 150b8f8cbd Handle long HTTP headers 2 years ago
R4SAS 79b97ef2f7
2.43.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS e45d68ad3a
[i18n] pull translations from Crowdin
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal b40f1b67b9 2.43.0 2 years ago
r4sas 4fa7e43162
disable ssu in example config file
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 years ago
r4sas 66fcbcae96
add ntcp2 and ssu2 options in example config
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 years ago
orignal 7f0845dfd3 reset acceptor on stop of server tunnel 2 years ago
orignal f875823357 copy path challenge to response 2 years ago
orignal 75611866eb update router's transports when SSU or NTCP address was deleted 2 years ago
orignal c3dd7ed73a try to resend if window is full 2 years ago
orignal 3ae885d120 change status back to Testing from Unknow if next test was accepted 2 years ago
orignal 81f53d313c alsways set some port to SSU2 address 2 years ago
R4SAS d10c86b849
[rpm] fix fedora build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 9d123fa5ad select random port if port not found or specified 2 years ago
orignal f4d6a08d57 create separate addresses for published SSU2 2 years ago
orignal e9e641afbe check if datagram destination exists before sending 2 years ago
orignal 8f5768f85b memory pool for leases 2 years ago
orignal 3dd78a2589 remove SSU address if SSU is off 2 years ago
orignal df92a85159 set SSU2 port +1 if not specified 2 years ago
orignal ab606a1121 adjust clock from SSU2 2 years ago
orignal 457b3cf168 disable ElGamal table if no SSU 2 years ago
orignal c6f898b8ca connect to Charlie if RelayResponse from Bob was received before HolePunch 2 years ago
orignal b9970e1908 cleanup introducers upon reschedule 2 years ago
orignal 8bb9a57908 re-insert introducer back 2 years ago
orignal 53934a470b update keys for NTCP2 and SSU2 addreses 2 years ago
orignal a94ae7d77d update keys for NTCP2 and SSU2 addreses 2 years ago
orignal f43e860998 cleanup introducers if router is not longer firewalled 2 years ago
orignal 3e40852999 memory pool for sent packets 2 years ago
orignal df073bb306 send local address in RelayResponse block 2 years ago
orignal 771c4a0d02 allocate smaller I2NP buffer for fragmented message. Limit number of fragments by 64 2 years ago
orignal cb959ab14c allocate tunnel message buffer for I2NP block with tunnel data message type 2 years ago
R4SAS 34b75dac02
change language file comment
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS fbb590d9a9
[i18n] add simplified chinese translation (thanks to sklhioq)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal ed5c533982 recgnize symmetric NAT from SSU2 2 years ago
orignal 98d2ce5845 Respond to path challenge. Correct termination reason for duplicated session 2 years ago
orignal 9d9d5e3e5d show ports for tranport links 2 years ago
orignal eba4626589 kappa for RTO culculation 2 years ago
orignal ff5fa1d137 3 bytes off for token in RelayResponse 2 years ago
orignal 71766ecd16 select introducers randomly. More logging for RelayIntro 2 years ago
orignal fc63ca6982 correct excluded routers size for exploratory request 2 years ago
orignal 0e6d888ed3 changed some retransmission params 2 years ago
orignal 9afe3b5f39 fixed typo 2 years ago
orignal 3bd40fc8b3 calculate RTT and RTO 2 years ago
orignal 01fe642beb don't create another session for peer test 2 years ago
orignal e70d57dcb4 resend intervals in milliseconds 2 years ago
orignal fd41fba069 variable retranmission window 2 years ago
orignal 8a6fe0f321 check if address type matches peer's address type for peer test msg 1 2 years ago
orignal ae73e8a305 find SSU2 address with static key if supports both ipv4 and ipv6 2 years ago
R4SAS a344c09d0d
[util] add inet_ntop for XP
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 991e37d0bf
[peertest] fixed ssu2 router exclusion
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS fdeb884fe5
fixed getting MTU on windows, add address to log messages with MTU
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 4b1f5c9c9b terminate session in separate task 2 years ago
orignal 6b513a0f95 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 years ago
orignal b574aaf99c fix SSU2 crash on shutdown 2 years ago
R4SAS bc0cdaa669
[i18n] update gettext file, add translation context, change comments
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal f9106b77bb add SSU2 introducer if SSU2 only 2 years ago
orignal a0419e4f34 add SSU2 introducer if SSU2 only 2 years ago
orignal 46a549c875 random size of fragments 2 years ago
orignal f8a609f692 respond to termination 2 years ago
orignal 987497bb10 don't publish invalid host/port 2 years ago
orignal e537878b8a check Ack block bufer size and shrink ranges if necessary 2 years ago
orignal 617f45bc59 try to send I2NP message in one packet, reduce or drop Ack block if necessary 2 years ago
orignal fe744f8f81 more routine cleanup 2 years ago
orignal 93d879b297 more tunnel brokers ranges 2 years ago
orignal dbb9295063 set MTU if local address is specified explicitly. update MTU for ipv6 if not set 2 years ago
orignal 09aa96e486 always bring to closing state if termination requested 2 years ago
orignal 4d0047ae7c request termination for existing session 2 years ago
orignal b860a4799d testing cap for published SSU2 address 2 years ago
orignal 6ff64352d3 don't create and oublish duplicates 2 years ago
orignal 3683ec6a95 fixed race condition 2 years ago
orignal 454fa9ee9b update SSU2 port 2 years ago
orignal d33aeb4bb2 set unreachable if firewalled. Store router's hash of introducer instead session 2 years ago
Gecero-Sensei 5f9f23eb3f
Added translation of webconsole site title 2 years ago
Gecero-Sensei 5dbc7a8ca4
Minor corrections and wording changes 2 years ago
Gecero-Sensei 33a5968eb7
Improved German translation 2 years ago
R4SAS 5ff34b93c0
print detected MTU
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 098fdf0596
[gha] update freebsd action 2 years ago
orignal 2eb929fe05
Merge pull request #1776 from simonvetter/openssl
leaseset: add missing bound checks
2 years ago
orignal ea0ed9e844 update SSU2 introducers if Firewalled 2 years ago
orignal 4a3e481a83 don't publish introducers for non-published SSU2 address 2 years ago
orignal 2197cd8620 add/remove SSU2 introducers to local RouterInfo 2 years ago
orignal cf0d3b5f61 create new list of SSU2 introducers 2 years ago
orignal 6f7ab49346 moved creation time to TransportSession 2 years ago
orignal 000e0358a7 resend SessionConfirmed immediately if another SessionCreated received 2 years ago
orignal a3e19931f0 insert RouterInfo from SessionConfirmed into netdb immediately 2 years ago
orignal 9fec1a86cf send ack for peer test 2 years ago
orignal ffab29890b created additional ranges if acnt > 255 2 years ago
orignal 206c068d8e don't send termination without address 2 years ago
orignal dc30cd1112 handle SessionConfirmed fragments in reversed order 2 years ago
Simon Vetter 412a245e88 leaseset: add missing bound checks
This builds on ChadF's issue and patch (https://github.com/PurpleI2P/i2pd/issues/1772)
and fixes other potential bound check issues.
2 years ago
orignal 16290bf66f fixed race condition on session termination 2 years ago
orignal 4f8b0e6484 send more SessionConfirmed termination messages. Limit send queue 2 years ago
orignal 5026dbc1b3 receive bigger packets 2 years ago
orignal 014e4b0e1d detect MTU for some known ipv6 tunnel brokers 2 years ago
orignal 14a6947b02 round MTU to multiple of 16 for SSU1 2 years ago
orignal 665a914dc3 set max MTU for ipv4 2 years ago
orignal 8feac310af start initial peer test if SSU2 only 2 years ago
orignal 3394bb4b8d calculate SSU2 session MTU and max payload size 2 years ago
orignal 1dd2bd0013 publish MTU for ipv6 SSU2 address. Max MTU of 1488 for SSU1 2 years ago
orignal 5c62726992 check clock skew and terminate 2 years ago
orignal 90981f628e Send fragmented SessionConfirmed 2 years ago
orignal 0c34189d94 correct buffer size for fragments of SessionConfirmed 2 years ago
orignal f1d3d6a7b5 set max compression for SessionConfirmed 2 years ago
orignal b0d962b49a send ack for retransmitted SessionConfirmed 2 years ago
orignal c50e453af6 check out of sequence messages range 2 years ago
orignal efbaf02016
Merge pull request #1774 from simonvetter/openssl
fix SSU2 introducers selection logic
2 years ago
Simon Vetter 3cf809e99d fix SSU2 introducers selection logic 2 years ago
orignal 8b649aaaf8 NACKs and Acks only Ack ranges 2 years ago
orignal fdebbc4498 select sessions for introducers 2 years ago
orignal 3ff3417ff2 send termiation with reason 2 years ago
orignal bb6227281a teminate session after 5 unacked resends 2 years ago
orignal 2f44d99a74 session closing state 2 years ago
orignal ca4414d15a request relay tag if firewalled 2 years ago
orignal fbb961b43c extract correct endpoint from peer test msg 2 2 years ago
orignal fa9c174264 handle first packet from Bob 2 years ago
orignal 83f43ab166 pick 3 routers for SSU2 peer test 2 years ago
orignal f7e9e6a1c4 set status OK after both peer test msg 4 and 5 2 years ago
orignal aa21748e9a set status OK after peer test msg 5 2 years ago
orignal a2f4e08b00 set testing status for SSU2 peer test 2 years ago
orignal 66bc29d075 insert received RouterInfo into netdb immediately 2 years ago
orignal e3eebe537b set correct port for unpublished SSU2 addresses 2 years ago
orignal 3ed625f949 don't try SSU peer test if SSU is disabled 2 years ago
orignal a1e414c3b7 make SSU2 server eligible for peer test 2 years ago
r4sas a5a35b1fa6 [daemon] check for SSU2 transport at start
Signed-off-by: r4sas <r4sas@i2pmail.org>
2 years ago
orignal 2a24584d45 set SSU2 port if not specified 2 years ago
orignal 6039cdceb0 correct SSU2 only detection 2 years ago
orignal 473159be0f don't use port from SSU2 address 2 years ago
orignal 0e6ad548b2 invoke SSU2 peer test updates 2 years ago
orignal 6143515ac6 update our IP adress from SSU2 2 years ago
orignal 50419f200d fixed 1 packet off for out of sequence clean up 2 years ago
orignal 455390f121 clean up first out of sequence packet if too many 2 years ago
orignal d375299fa9 send token in relay response block 2 years ago
orignal 28db337166 give priority to SSU2 over SSU 2 years ago
orignal 6ca9a599ff remove session after HolePunch received 2 years ago
orignal 83bd3b6f0b use token from RelayResponse block 2 years ago
orignal a68765e021 fixed off 5 bytes for follow on fragment 2 years ago
orignal f5ed9129cd process retry as reponse to relay request 2 years ago
orignal 5e3115a614 check nonce in HolePunch relay response block 2 years ago
orignal 624c46f925 correct msg offset for follow-on fragment 2 years ago
orignal 52d1ee161f store RouterInfo in netdb from SessionConfirmed 2 years ago
orignal d3bc9eb110 update token and conn id after HolePunch 2 years ago
orignal 72b61a29c2 check TokenRequest message size 2 years ago
orignal a99fcfe54f cleanup terminated sessions 2 years ago
orignal b5d139f7b2 process session created after session request sent 2 years ago
orignal 463ed12ce8 don't pick same session for PeerTest msg 2 2 years ago
orignal baf74cb582 1 byte off for RelayRequest signature 2 years ago
orignal 63d7cffefe Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 years ago
orignal d7d74666b2 correct max MTU size 2 years ago
R4SAS 078d76c6f3
fix tabulation, remove long description (to be moved to documentation)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 3539ee9be6
Merge pull request #1769 from AVAtarMod/sigtstp-patch-1
Add SIGTSTP, SIGCONT support
2 years ago
AVAtarMod 437282b148 [config, daemon] catch TSTP, CONT is option 2 years ago
AVAtarMod 5394b747a1 [daemon] add SIGTSTP, SIGCONT support on Unix 2 years ago
orignal dd1dd3b7cf wait for Ack for SessionConfirmed or resend 2 years ago
orignal ae77d4ad22 correct signed content for peer test msg 3 2 years ago
orignal 821987fed7 don't send peer test for unknown address/port 2 years ago
orignal 18ddba4332 send RouterInfo message to right session in relay request 2 years ago
orignal aaad6dece6 set session request sent status in right place 2 years ago
orignal ed04747b9d resend SessionRequest and SessionCreated 2 years ago
orignal 827a88d772 exclude expired SSU2 introducers 2 years ago
R4SAS 24e325db62
[make] fix install target paths for linux and homebrew
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 38e43bc9c8 check Charlie's address for PeerTest msg 4 2 years ago
orignal c3c5c7ae63 forward correct RelayResponse from Charlie to Alice 2 years ago
orignal 578a15bbe5 don't send PeerTest msg 5 if address is not supported 2 years ago
orignal 6b3d7372ae token received session state 2 years ago
orignal 55f7529167 delete pending outgoind session when Retry received 2 years ago
orignal bceae244c1 delete pending outgoind session when SessionCreated received 2 years ago
orignal 5de224d6bf don't connect if pending connection already 2 years ago
orignal 694b936f30 verify signature for PeerTest msg 4 2 years ago
orignal dda25d431c check if we can send HolePunch to partcular address 2 years ago
orignal 22f9abc2f1 send errors for RelayIntro 2 years ago
orignal c6c3de9164 fixed PeerTest signature verification 2 years ago
orignal 58186f0283 handle PeerTest msg 4 if msg 5 was received before 2 years ago
orignal 0253e2d3f6 different nonce location for PeerTest msg 2 and 4 2 years ago
orignal ee20d5b804 sign data for PeerTest msg 3 and 5 2 years ago
R4SAS 3a5295dbb9
[cmake] remove unnecessary target link
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 39f14fd952
[cmake] add GetGitRevisionDecription module
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 4d59df9f59
[cmake] add support of getting version from git (as in makefiles)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal b8bc114502 correct source connection id for HolePunch 2 years ago
orignal 74d29770e1 handle unexpected PeerTest message 2 years ago
orignal e4d5788cdc correct endianess for PeerTest mesaage connection id 2 years ago
orignal 2a5cf3e4a8 SSU2 connect timer 2 years ago
orignal c348736058 send updated local RouterInfo for long sessions 2 years ago
orignal 5bb20cb039 token expiration threshold 2 years ago
orignal dd602a27b5 send RelayResponse rejection message 2 years ago
orignal 2067de162a show itag for SSU2 sessions 2 years ago
orignal 2cc106b43e bind SSU2 socket to specified interface 2 years ago
orignal b15bfd99b3 correct layout for peer test masg 2 and 4 2 years ago
orignal 67252b90b3 generate new token with longer expiration time 2 years ago
orignal 079f7e515c correct hangling of Ack ranges 2 years ago
orignal e8c58270c4 Populate router's buffer before sending RouterInfo block 2 years ago
orignal 0c64f278d7 1 byte off for ranges in Ack block 2 years ago
orignal 03518ec94f fixed typo 2 years ago
orignal 93b5dc2dff send new token block in SessionCreated 2 years ago
orignal 3bef6383d9 send update local RouterInfo 2 years ago
R4SAS 605ccf3e02 [BOB] require commands options, fix usage of existent nick and status
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 17892238a9 update supported transports for SSU2 2 years ago
orignal b678c989e2 fixed typo 2 years ago
orignal b72d1237d2 correct values for last ack range 2 years ago
orignal f7b6db5dad PeerTest for connection through introducer 2 years ago
orignal b744a0cc38 correct ack ranges calculation 2 years ago
orignal b918499f14 correct SSU2 server termination 2 years ago
orignal 2cfd054f2c publisuh peer test cap for published SSU2 addresses 2 years ago
orignal dddc7ab039 publisuh peer test cap for published SSU2 addresses 2 years ago
orignal 2e4d8cdc8b handle PeerTest msg 1 2 years ago
orignal 0640bec026 corect ack count in ranges 2 years ago
orignal cbcee5fb45 handle peer test messages 4 and 5 2 years ago
orignal 47460d86b2 verify signature and send peer test msg 5 2 years ago
orignal 3cd74f0d4f send PeerTest message 2 years ago
R4SAS 690c9f7c6f
[FS] add support for windows ProgramData path when running as service
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS e2718e5a12
[config] change descriptions for deprecated options
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal d9fefe757e SSU2/SSU2Session split 2 years ago
orignal 55e4bf6b65 set correct statuc code for peer test 2 years ago
TomasGl 0176e5cf18 Do not show 'Address registration' line if leaseset is encrypted 2 years ago
orignal 4670b12d49 correct buffer size for token request 2 years ago
orignal 321ec8ae4d correct size for Ack block with ranges 2 years ago
orignal 1ccbb8d10b correct offset for nonce in peer test message 2 years ago
orignal 86c0accdce check nonce for peer test msg 5 2 years ago
orignal 38d6c29ce9 correct timestamp size for peer test message 2 years ago
orignal 0cf9478cd4 create SSU2 session for peer test msgs 5-7 2 years ago
orignal a04abd304a don't send own hash for peer test msg 1 2 years ago
orignal 84aec9fe31 correct msg for first peer test message 2 years ago
orignal 593b9bb6c5 start SSU2 server before peer test 2 years ago
orignal d3a9cc8fde check if session is established before sending peer test 2 years ago
orignal 87a434c377 start peer test for SSU2 2 years ago
orignal 56022c9442 handle garlic messages from tunnels without pool 2 years ago
orignal 593d6bf466 create initial peer test 2 years ago
R4SAS 29a4366dcf
fix mingw build script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 0a42f414bf [makefile] update support for WSL, remove gcc version detect
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9b2ac4349e [cmake] use Threads::Threads (closes #1735)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 2d4c7729ad case-insensitive headers 2 years ago
orignal 6ecab66b0e always send Connection: close, strip out Keep-Alive for server HTTP tunnel 2 years ago
orignal 1dded57a1c fix typo in Referer 2 years ago
orignal 1d6104ecf3 addressbook.enabled config param 2 years ago
orignal 14da941ff4 Fixed #1761. Correct section for SSU2 2 years ago
R4SAS 06b87311ea
2.42.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 3b31773117
[deb] remove O3 optimization flag
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9c87fe79ea
[openssl] suppress deprecation messages
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS bd00112562 update windows build script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 1c9160c37d correct jump link 2 years ago
orignal e2ef88229f fixed warning 2 years ago
orignal fd7b889a0f 2.42.0 2 years ago
R4SAS a7aa056ec1
[gha] fix typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 4f74acb2d3
[gha] build docker containers on tags
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 22ef1be82b
[gha] build docker containers only when pushing to openssl branch
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9ddbf255ba
fix const std::map usage
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS dfb171d32a
[httpproxy] ordered jumps list
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 6b4ffcff5a cleanup code (spaces, tabs)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS d31cd2e5d6
fix incorrect boolean value parsing
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 396c74e6c6 Revert "Simple refactor of nested if-statements" 2 years ago
R4SAS 609c658a9b
[gha] publish releases with latest-release tag
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS ee6bb40736 remove obsolete msvc define
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS f8c5ea2b42 [i18n] add french translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 923eb9fdb3 fix udp tunnels reload
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 2cd3ebbdb3 copy peer test block 2 years ago
orignal 5e25e30330 check if there is only one unacked packet 2 years ago
orignal 5aa2a8f60f handle peer tests 2 years ago
orbea 0a1e302e8a libi2pd: Fix the build with LibreSSL 3.5.2 2 years ago
orignal bb705a77cf handle PeerTest message 2 years ago
orignal cb6155b946 fixed warning 2 years ago
orignal 714d1cc993 close stream if delete requested 2 years ago
orignal bc8e4494c4 random new profiles cleanup interval 2 years ago
R4SAS c3a064f980
change int type
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS eb3feb7dbd [profiles] add daily cleanup
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal da3f3ccac9 connect to reachable introducers only 2 years ago
orignal 1a1871e8cd add RouterInfo block before RelayIntro 2 years ago
orignal c22ab7e1fc use openssl's siphash for 3.0.1 and higher 2 years ago
orignal 436992b069 send and process HolePunch message 2 years ago
orignal 18cb3912e5 fixed imccorect termination 2 years ago
orignal a818b0ba02
Merge pull request #1748 from voltamperoff/Refactor-I2CP-CreateSessionMessageHandler
Simple refactor of nested if-statements
2 years ago
R4SAS 3716b6f988
move TunnelHopVisitor inside Tunnel class
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS c9e4e78f41
[webconsole] remove version from title, move tunnel chain print from Tunnel class
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9b4e8bf64b [webconsole] do not show registration block when token is not provided
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 5aebefe73f connect through introducer 2 years ago
R4SAS 8f2124beab
update reseeds
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 8b8b43df28
[rpm] support rhel 9
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS c42b991bc9
[rpm] pre-support rhel 9
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS ec08333bf9
[rpm] fix build on fedora 37
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9e5b4e14c9
[rpm] fix build on fedora 37
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 1f5ed89a88 set blinded signature type to RedDSA for EdDSA 2 years ago
R4SAS 2304a2bc2e remove android contrib files (moved to android repo)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal dc82105226 check status code and verify RelayResponse signature 2 years ago
orignal 5221f3ddc9 one SSU2 session per remote router 2 years ago
orignal e970deb92b check presense of introducers in SSU2 address 2 years ago
orignal 9db7ec6bb0 create and send RelayRequest 2 years ago
orignal 2e691b6655 check if next manage time is too long 2 years ago
orignal f22e10537b fixed typo 2 years ago
orignal 6e532c494c create new published SSU2 addresses 2 years ago
orignal f9ed0d4aa2 fixed crash 2 years ago
orignal 78b1afcc8c publish introducer cap for SSU2 address 2 years ago
orignal 40340cf9c2 handle RelayResponse 2 years ago
orignal eb6437050f SSU2 introducers 2 years ago
orignal 45ebfe378b correct Ack range 2 years ago
R4SAS 1326597226 use ipv6 preference only when netinet headers not used (entware with musl workaround)'
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 751da92c13 send relay response 2 years ago
orignal e10ca637da handle RelayIntro 2 years ago
orignal c5d9d71a8a create relay tag and relay request block 2 years ago
orignal 3e0f5d231d send queue after batch of packets 2 years ago
orignal 6990f177ba window size 2 years ago
orignal 98e713166b show port for non-published SSU addresses 2 years ago
orignal 4c91ae0085 check if end of list 2 years ago
orignal 43f74d4d5a resend packet with new packet number 2 years ago
orignal 8c3e716c3f ranges in ack block 2 years ago
orignal 05946125b5 handle single packet 2 years ago
orignal 1e2a0a4549 handle incoming packets in batch 2 years ago
R4SAS f9f5084dd7
typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS b7e7c6db7b
UDP Client: ignore incomming traffic and error when stopping (prevent socket restarting)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal f9d67b28ec handle fragmented SessionConfirmed 2 years ago
orignal 46b77cc280 increase RouterInfo buffer size 2 years ago
R4SAS 2f10decf56 daemon: make possible to set datadir before init
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 678a1ae0fb send fragmented messages 2 years ago
orignal 51cbffd097 don't lookup session for every sinle packet 2 years ago
orignal 207b13dcab send correct acnt if gaps 2 years ago
orignal 3052dbd1e8 single receive thread for both ipv4 and ipv6 2 years ago
orignal 5891b1ceb2 separate receive thread 2 years ago
orignal 07e14ddda8 check if SSU2 enabled 2 years ago
orignal db5e90787c update I2NP header after all fragments received 2 years ago
orignal 67e501f5c7 correct nonce for SessionCorfirmed part 2 2 years ago
orignal 2160001167 correct non for token request and retry encryption 2 years ago
orignal f5f4150d17 fixed typo 2 years ago
R4SAS 887f292612
update install target to use correct share directory, skip dh_auto_install in debian
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal f5f282af97 cost for published SSU2 address 2 years ago
orignal 82f9585b7a handle fragments 2 years ago
orignal eb561bb0c2 handle Ack ranges 2 years ago
orignal 81207999eb check token in SessionRequest 2 years ago
orignal 2fef595b83 resend packets 2 years ago
orignal 2024e790ca send I2NP messages 2 years ago
orignal f9925c7374 hanlde Ack block 2 years ago
orignal dd774b8dfd store out of sequence packet numbers 2 years ago
orignal 064b8042a5 ssu2.published and update SSU2 ipv4 2 years ago
orignal 7923ed9567 publish SSU2 address 2 years ago
orignal 30b83414ef find SSU2 address by address type 2 years ago
orignal 990906c57f insert garlic tag in destination's thread 2 years ago
orignal 4c323a666a show SSU2 transports in web console 2 years ago
orignal a3f165d374 handle and send termination 2 years ago
Volt Amperoff 4977f9e6b4 If-statements are simplified. Checks are rearranged for faster errors detection without unnecessary actions. 2 years ago
orignal 7d5f51e357 don't send instant Ack for out-of-sequence message 2 years ago
orignal 371a339b18 encrypt Data header 2 years ago
orignal 7e7aee27b6 handle I2NP message block 2 years ago
orignal 53148fe58f send Ack packet 2 years ago
orignal 56b6de6962 correct header decryption for Data message 2 years ago
orignal 44735681af KDF and process Data message 2 years ago
orignal ee1c4f4fdc internal numeric id for families 2 years ago
orignal fb6ecdde1e handle TokenRequest 2 years ago
orignal 861166d8a9 send TokenRequest message: 2 years ago
R4SAS 70dca81c40 dropped MESHNET build option
Dropping MESHNET build option due to lack of usage. That change won't
affect on usage with currently supported Yggdrasil network.

Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 2774d72888 [makefile] add install target for linux
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 2440ffbfc9 handle SSU2 SessionConfirmed 2 years ago
orignal 77c5dde320 send SessionConfirmed 2 years ago
orignal aa49cad279 correct encrypted payload size for MixHash 2 years ago
orignal f56ae240ab don't delete peding endpoint if Retry received 2 years ago
orignal e871a30a78 initialize connid in constructor 2 years ago
orignal 30e6984889 handle Retry message 2 years ago
orignal 324932c758 separate i and key fields for shared SSU address 2 years ago
orignal 421800bc8f recognize SSU address supporting SSU2 2 years ago
orignal 86fb47b2b4
Merge pull request #1744 from WaxySteelWorm/openssl
Added StormyCloud Inc family cert
2 years ago
WaxySteelWorm 715f83bf84
Create stormycloud.crt 2 years ago
orignal 87bf5c2418 cleanup pending sessions 2 years ago
orignal 5c9af1c613 MixHash with encrypted payload after decryption 2 years ago
orignal 765e0e5c6b correct 'i' size for SSU2 2 years ago
orignal cc296e16dc don't make SSU2 address published is 'i' is presented 2 years ago
orignal ab9901525b separated sockets for ipv4 and ipv6 2 years ago
orignal 3643a46a0c don't update SSU2 port 2 years ago
orignal d467e6869d don't update address for SSU2 2 years ago
Dimitris Apostolou db36018849 Fix typo 2 years ago
orignal 3c5c375f71 connect to SSU2 address 2 years ago
orignal 7473d8c9aa create and handle Address block 2 years ago
R4SAS 33645d7f09
[gha] XP: use make option for XP
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 9f1106b14a
[gha] XP: noconfirm for pacman
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 3dd952b49b
[gha] XP: noconfirm for pacman
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 6b85bd2cb8 [gha] XP: fix MinGW repo url
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 60b164c853 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 2 years ago
orignal 40c8a1bc1d handle payload blocks 2 years ago
R4SAS 22de695f12
[gha] install git to XP builder
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS e91f588cd7 [gha] build for winxp
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 7b72d91549 receive incoming SSU2 packets 2 years ago
orignal b3c2e86436 skip unknown address 2 years ago
orignal 908bdc7624 always publish intro key for SSU2 address 2 years ago
orignal 21c1ec9c8c enable SSU2 server 2 years ago
orignal 6d7d71bb16 don't show address:port for non-published addresses 2 years ago
orignal 6eba061c2a show local SSU2 address 2 years ago
orignal f184f550b9 SSU2 address in config and RouterInfo 2 years ago
orignal bb7c0fef20 SSU2 address in config and RouterInfo 2 years ago
orignal 5c15a12116 don't allocate buffer from netdb for LocalRouterInfo 2 years ago
orignal 68d015763e recognize SSU2 addresses 2 years ago
orignal 7faa732f38 send SessionCreated 2 years ago
orignal 11f9eeabf1 inbound.lengthVariance and outbound.lengthVariance 2 years ago
orignal a152f36894 MixHash for SSU2 long header 2 years ago
orignal d4ede6ff01 process SessionRequest 2 years ago
orignal 35542d803c KDF for session request 2 years ago
orignal f6ba776c12 SSU2 keys 2 years ago
orignal 1511dcb309 store endpoint and send packet 2 years ago
R4SAS 35afa98112
[reseed] add new reseed
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS df62b40ca7
[win32] return back service control code (#1733)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 9f1a125ed9 decrypt connID for incoming packet 2 years ago
R4SAS b7e20b9b86
2.41.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS a5d6972913
[win] update build script license year
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS e4cb42c599
[win] add binary signing support
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 0a34f1f3ad 2.41.0 2 years ago
orignal 7bdeaa9611 don't pick own router for peer test 2 years ago
R4SAS ab2577ce0a [daemon] print errors to stdout
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 34544be423
Merge pull request #1732 from PurpleI2P/patch-1
Set of updates
2 years ago
R4SAS 6bf0fdd344
[webserver] use cancel instead shutdown for acceptor
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 6a177cdd1c
fix incorrect change in year
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS a51ef0cfc6
set of updates:
* [webconsole] change error handling code to restart acceptor after any
error
* [webconsole] call shutdown vefore stopping acceptor on exit
* update license headers for modified files, change year to file
  creation year, not 2013 (when project started)

Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 48374d97df always use TCP/IP sockets for I2CP 2 years ago
R4SAS bf3d7e74f5
[i2cp] use tcp/ip socket on android
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS ab3f3890e4
[i2cp] use tcp/ip socket on android
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS dceb0fb8c5
[cmake] add warning about MESHNET option
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 05c1856389
[cmake] do not use CMAKE_OSX_ARCHITECTURES for check
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS dc5cba60d1
[cmake] add MAC_OSX define for Mac
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 70409dcdcc
Merge pull request #1728 from eyedeekay/swig-binding-cleanup
Removes workaround for passing string arguments from Go
2 years ago
orignal a92c29e04c drop routers older than 6 months on start 2 years ago
idk c4b4dc79cf
Remove janky workaround for argument passing from Go. This should allow other languages to use the binding more easily, and go-i2pd doesn't need the workaround anymore 2 years ago
orignal 510fe43ec4 create and encrypt SessionRequest 2 years ago
R4SAS 73e572b66b
disable thread naming for PowerPC (#1726)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS a272a2cb7e
[cmake] update min version, drop PCH
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 43b990afe6
[cmake] disable deprecation warning when OpenSSL 3 is used
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 90130b5492
fix exception printing
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS f22faaefeb
remove duplicate definition
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS ac25649425 cast pthread name to char* for apple sdk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 04388325a8 KDF and encryption for SessionRequest 2 years ago
orignal 61ec873842 fixed incorrect ret code 2 years ago
orignal ea1f2d4e26 use i for intro key for SSU 2 years ago
orignal 4211c733a2 s and i keys for all addresses 2 years ago
orignal 450266818a Noise XK for SSU2 2 years ago
orignal 1e019157bb SSU2 initial commit 2 years ago
orignal c9a1066f02 send SessionCreated before connection close if slock skew 2 years ago
R4SAS 0062f7d764
[reseed] dont do yggdrasill address check if option disabled
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 95e994e171 pass incomplete I2NP message by move 2 years ago
R4SAS 31242401e5 [cmake] update TargetArch.cmake (#1724)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 19cc1c3b3f adjust clock from SSU SessionCreated is time difference exceeds 15 seconds 2 years ago
R4SAS 03bcdceb9b
[gha] add ucrt windows build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 33ca836ad0
[gha] add ucrt windows build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 53f19e4050
Use builtin bitswap for endian on windows
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 54b7d46f5a reseeds update
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 40e6d675c5 I2NP messages pool for I2CP 2 years ago
orignal 73b77c83b8 select compatible outbound tunnel 2 years ago
R4SAS 632d41e50c
[rpm] try to fix fedora copr build [3]
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 17acadbfb9
[rpm] try to fix fedora copr build [2]
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS 2ab5924ec9
[rpm] try to fix fedora copr build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
R4SAS ac09a4cf0f [i18n] update german translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal c10ee59de3 cleanup memrory pools if no more streams 2 years ago
orignal afad405ed9 check for duplicate destination 2 years ago
R4SAS 5a35de8dc9
[i18n] update uzbek translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2 years ago
orignal 58cf26c304 cleanup properties before update 2 years ago
orignal a2de5564ac moved m_Properties to LocalRouterInfo 2 years ago
orignal 338b17ccf1 LocalRouterInfo for own router 2 years ago
orignal 843a968959 integer uptime 3 years ago
R4SAS dc45c13eef
[i18n] added german translation (thanks to mark22k@crowdin)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 0d6e801595
[webconsole] change dark style colors
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 2cd50ebaee fixed race condition 3 years ago
orignal cb6f6a6596 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 3 years ago
orignal e4ab0acc92 create RouterInfo from shared pointer to Buffer 3 years ago
R4SAS 10237c41d3
Merge pull request #1717 from rex4539/typos
Fix typo
3 years ago
Dimitris Apostolou ac2c6c6010
Fix typo 3 years ago
orignal c6b2ce93c4 Memory pool for RouterInfo address 3 years ago
orignal 401b7fe883 send error message in quotes 3 years ago
orignal f567417bb3 memory pool for RouterInfo buffer 3 years ago
orignal ae5cb3bbe7 rollback 3 years ago
orignal 0eb8e15796 allocated actual buffer size for RouterInfo 3 years ago
orignal 1c95c7856f avoid duplicated addresses. Check presence of netId and version 3 years ago
orignal daf7551e59 try another fllodfill if no compatible tunnels 3 years ago
orignal 5b63d3692e HidUser0's yggdrasil reseed added 3 years ago
R4SAS 5f9972af78
[addressbook] fix loading subscriptions from config
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 1be4cce074
[addressbook] fix loading subscriptions from config
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 935e93eb36 minimal send ack interval 3 years ago
orignal 5d924cd35a don't copy received datagram 3 years ago
R4SAS 27116b9f30
2.40.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 8ac2ee49a8
[gha] fix build without pushing tag for pre-release debian packages
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 8a8e328fcf
[build] include contrib/webconsole to windows packages
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS c4207e7672
[webconsole] update css
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 73642703bd
2.40.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal b3bd175e64 2.40.0 3 years ago
R4SAS 742032907a
[gha] update freebsd action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS edc0162163
clean line trailing spaces and tabs
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 94661f697b
[log] update log messages (closes #1693)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 4ecf36fab6
update bandwidth option description (closes #1704)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 96cdb3bca3
reseeds update
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 6c57ba36f7 lazy initialization or tunnel gateway's random buffer 3 years ago
orignal cb61897236
Merge pull request #1708 from acetoneRu/openssl
--help small correction
3 years ago
acetone 8b931dd40b
Transit traffic bandwidth limit 3 years ago
acetone 6b81478bd2
Merge branch 'PurpleI2P:openssl' into openssl 3 years ago
acetone 9d94eb83c1
--help
Traffic bandwidth -> Transit traffic bandwidth
3 years ago
R4SAS 13374f8b7b
[gha] publish windows artifacts separately (#1707) 3 years ago
R4SAS 7bf7aae3d1
[i18n] fix type in translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS e5f39d0caf
[i18n] add armenian translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 174983548d
Merge pull request #1705 from rex4539/typos
Fix typos
3 years ago
orignal a9ec4d916b
Merge pull request #1706 from acetoneRu/openssl
Transit traffic bandwidth configuration
3 years ago
acetone a55c346af5
Bandwidth configuration
Changed to 'Transit traffic bandwidth configuration'
3 years ago
acetone 8e0d8c96bb
Merge branch 'PurpleI2P:openssl' into openssl 3 years ago
orignal 9abd383014 eliminate extra pointers for tunnel hops 3 years ago
Dimitris Apostolou 8ee9c437e1
Fix typos 3 years ago
orignal 4052b1ea6d pick compatible outbound tunnel for datagrams 3 years ago
R4SAS fdde197c58
[webconsole] update stylesheet
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 49883dc3ac
[webconsole] update stylesheet (closes #1699)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal d798faa1ca pick compatible ooutbound tunnel 3 years ago
orignal 3f63f15b16 copy compatible transports to new tunnel 3 years ago
orignal f8c390cdd3 pick compatible tunnels 3 years ago
orignal 8f0978cfd6 all transports by default 3 years ago
orignal 1a8a32a773 select next tunnel with compatible transports 3 years ago
orignal c0400bfd07 virtual destructor for TunnelConfig 3 years ago
R4SAS c6e4758187
Revert "Merge pull request #1703 from simonvetter/simon/memory-and-multithreading-fixes"
This reverts commit 67863cfcf9, reversing
changes made to 4c5ec68ff1.

That change completly bloking transports thread on windows.

Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 56ec8fe95b eliminate local destination mutex 3 years ago
orignal 67863cfcf9
Merge pull request #1703 from simonvetter/simon/memory-and-multithreading-fixes
memory leak and concurrency fixes
3 years ago
R4SAS 4c5ec68ff1
[win] add menu item for opening datadir
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
Simon Vetter 58b7b7d731 libi2pd: add missing locks to i2p::tunnel::TunnelPool 3 years ago
Simon Vetter 1de1c79d4f libi2pd: add missing locks to i2p::tunnel::Tunnels
m_InboundTunnelsMutex, m_OutboundTunnelsMutex and m_PoolsMutex
have been changed to recursive_mutexes since they can be
acquired multiple times by the same thread.
3 years ago
Simon Vetter 7073a6bf38 libi2pd: make Tunnel and TunnelConfig destructors virtual 3 years ago
orignal 26db88d89b check if sip key is available 3 years ago
orignal 876e98d91e check if sip key is available 3 years ago
orignal 8566f6c127 don't store EVP_PKEY sip keys 3 years ago
orignal bb8dc67942 don't use openssl's SipHash from 3.0.0 due regression 3 years ago
orignal 9965d72990 don't store EVP_PKEY with EdDSA signer and verifier 3 years ago
orignal 921ec9ec12 fix build with openssl 3.0.0 3 years ago
orignal f1990bc2ab use tunnel endpoint memroy pool to split to tunnel messages at gateway 3 years ago
orignal cdc8e463b7 use memory pool for outgoing tunnel gateway messages 3 years ago
R4SAS 0a62a962d7
[debian] update upnp patch
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS b0f043ec86
[make] USE_GIT_VERSION option to use commit info in version (closes #1702)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal ae0cf2e831 use memory pool for tunnel messages 3 years ago
orignal 4ce7e192d6
Merge pull request #1701 from simonvetter/openssl
fix a few undefined behaviour/out of bounds issues
3 years ago
R4SAS 04ca916aac
Merge pull request #1700 from xanoni/set-default-make-target
Makefile: set default target ("all")
3 years ago
Simon Vetter a348e10620 libi2pd: fix undefined behaviour and memory overruns
This fixes the following issues (flagged by cppcheck):
[libi2pd/ECIESX25519AEADRatchetSession.cpp:537]: (error) Buffer is accessed out of bounds: m_NSREncodedKey
[libi2pd/Identity.cpp:22]: (error) Buffer is accessed out of bounds: keys.publicKey
[libi2pd/Identity.cpp:22]: (error) Buffer is accessed out of bounds: publicKey
[libi2pd/NetDb.cpp:70] -> [libi2pd/NetDb.cpp:69]: (error) Iterator 'it' used after element has been erased
[libi2pd/SSUData.cpp:186] -> [libi2pd/SSUData.cpp:187]: (warning) Shifting 32-bit value by 63 bits is undefined behaviour.
3 years ago
Simon Vetter af794f901f libi2pd: minor logging fixes 3 years ago
R4SAS 8a58572b34
[webconsole] upload example dark style
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 0c25e8f1eb [build] changes in windows build script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
xanoni ff3d2db85e
Darwin: allow calling make install more than once
This commit ensures that `gzip` does not overwrite any of the repo
files, because that prevents `make install` from executing more than
once.
3 years ago
xanoni efd84a2404
Makefile: set default target ("all")
Fixes compilation on Darwin, see:
https://github.com/PurpleI2P/i2pd/pull/1698#issuecomment-946304938
3 years ago
orignal 278fd2d8d5 create tunnel I2NP message for tunnel data 3 years ago
orignal 197882a4c9 create I2NP depending on type in I2NP block 3 years ago
orignal d310efcb5c pass I2NPMessage by move 3 years ago
orignal 1af9117b80 don't create new tunnel message for encryption/decryption 3 years ago
orignal 44e01b41f8 reserve address for 3 introducers 3 years ago
orignal 7def2fa6a3 use std::vector for address list 3 years ago
orignal 48131f4597 don't store full path with RouterInfo 3 years ago
orignal 49e8cf89d8 don't send short tunnel build messages for ElGamal only destinations 3 years ago
orignal e6bcd04a36 short build message for re-created tunnels and far end transports 3 years ago
orignal af133f4968 fixed crash if incorrect blinded signature type 3 years ago
R4SAS d723faaaa3 [UDPTunnel] restart local listener on error
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal cc75efcbca fixed build for C++11 3 years ago
orignal 2eded7cdd7 send ping every keealive interval for client tunnels 3 years ago
orignal b10e5ce358 send ping 3 years ago
orignal 1bb1d89fab change back to map and unodered_map 3 years ago
orignal b9dd4aee8d use flat_map for incompete messages 3 years ago
orignal 518e53a61c use flat_map for smaller tables 3 years ago
orignal 18b6ba80f2 cleanup RelayRequests 3 years ago
orignal 8debdc264c use common cleanup timer for all SSU sessions 3 years ago
orignal 31bdce1f1f cleanup received messages list by timestamp 3 years ago
orignal 317d8cdc48 don't allocate separate buffers for SessionRequest and SessionCreated 3 years ago
orignal 5b2b9e00a2 reuse receive buffer 3 years ago
R4SAS 3dd9e81296
[addressbook] check domain ending when processing subscriptions
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS d2faec70be
[gzip] do not initialize deflator if gzip is not enabled for tunnel
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS e5c773a3eb [webconsole] move resources to separate header file
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS ec86c4611d disable reload checks for UDP tunnels (TODO)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 247b6a0ed2 memory pool for SSU packets 3 years ago
orignal f7f36568ef set gzip compression to false by default 3 years ago
orignal e054c6e82c memory pool for SSU messages and fragments 3 years ago
orignal 5e2e1a1e3d don't include old tunnel to LeaseSet if recreated 3 years ago
orignal ad036de69d eliminate allocation of m_ExtendedBuffer 3 years ago
orignal 20652f7995 resseed if too few floodfills 3 years ago
R4SAS 2f88a75325
Merge pull request #1688 from yangfl/openssl
disable pthread_setname_np on GNU/Hurd
3 years ago
orignal 292fe94352 RouterContext is always ECIES 3 years ago
orignal 76dca1b46b don't handle ElGamal build record 3 years ago
orignal a54b5c18c6 fixed crash 3 years ago
orignal c763472914 select ECIES routers only for peer tests and introducers 3 years ago
orignal 3a77e7ba2d remove dependancy from localization 3 years ago
orignal 41d6c117ee make sure server tunnel is published 3 years ago
orignal e8f4c42bfb moved current language from RouterContext to ClientContext 3 years ago
orignal bce8469e59 eliminate extra error message 3 years ago
yangfl 3f46ca41ca disable pthread_setname_np on GNU/Hurd
which does not exist on GNU/Hurd
3 years ago
R4SAS 6b1ef6e1b9
tunnels reload changes: fix tcp tunnels reload
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 349022ae42 don't select ElGamal routers for tunnels 3 years ago
orignal bb518d3d51 don't pass BN_CTX to encrypt/decrypt functions 3 years ago
orignal c45e202fab removed ElGamal encryption support for own router 3 years ago
orignal 541464b705 don't delete floodfill if number of remaining floodfills is less than minimal 3 years ago
R4SAS c762acd780
Merge pull request #1687 from dbermond/fix-test-blinding
[tests] fix compilation of test-blinding
3 years ago
R4SAS ec98ff297c
Make blinding test runnable 3 years ago
R4SAS af2c6c5575
[rpm] change if statement to cover fedora 35
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
Daniel Bermond 7d220fb2eb
[tests] fix compilation of test-blinding
test-blinding currently fails to build with the following error:

In file included from ../libi2pd/Timestamp.cpp:19:
../libi2pd/RouterContext.h:21:10: fatal error:
I18N_langs.h: No such file or directory
   21 | #include "I18N_langs.h"
      |          ^~~~~~~~~~~~~~
compilation terminated.
3 years ago
R4SAS f0c49b58fb
suppress inconsistent-missing-override warning message
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 24eeadea76
[rpm] add changelog note
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 455c71ff25 fix warning about ifr_name size
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 96850da31e 2.39.0 3 years ago
R4SAS 6ba992dabd
[rpm] try fix build on fedora rawhide [try 3]
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 2bdfcedd0e
[docs] add comma to description
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS c93ab8f829
update changelog, i2pd.conf
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 8abd08bd1b change log for 2.39.0 3 years ago
R4SAS 33355c0abe
[rpm] try fix build on fedora rawhide
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS b830babcf4
[rpm] try fix build on fedora rawhide
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 97765ef895
[i18n] add namespace
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 8943d212ee
[i18n] add Uzbek translation (partial)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 86e118f2b7
[i18n] change string in HTTPProxy
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 8c3823fc92
[gha] build docker containers for arm/arm64
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal b0874410f1 take first avalable resolved address if local address is not specified 3 years ago
orignal 797f5eb714 select compatible resolved address for server tunnel 3 years ago
orignal fc29911ffd rollback 3 years ago
R4SAS 1e17ef2f21
[webconsole] show v4 status only ipv4 is enabled
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS b3e7b1b5ac
Squashed commit of the following:
commit 40ec4e8b59
Author: Simon Vetter <simon.vetter@runbox.com>
Date:   Fri Jul 30 21:23:27 2021 +0200

    libi2pd: mark additional ipv6 addresses/nets as reserved

    This adds :: (undefined address), ::1 (loopback address) as well as
    ff00::/8 (multicast prefix) to reservedIPv6Ranges.

    A bunch of nodes seem to be publishing bogus addresses (mostly ::1)
    in the netDB, resulting in unnecessary tunnel build failures.

Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 38a2d45a3c close all existing streams when command SAM socket got closed 3 years ago
orignal 49b3ac7f77 don't reschedule resend timer for terminated streams 3 years ago
orignal d124d4cace allow ipv6 adresses for UDP server tunnels 3 years ago
R4SAS ba369d9b30
[webconsole] fix style in css
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS bef8587d8f
[makefile] create object dirs on windres (race condition)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS fcbc16f2fd
[webconsole] fix style issues, clean external style in file was not found on reload
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
r4sas a3b172bbcb [makefile] change back directories creation, create them before compiling object files 3 years ago
R4SAS 2f945a4fce [makefile] dont build .so and .dll on default target
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS dc9e5dc2f1 [makefile] suffix, not prefix
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 9396827379 [makefile] build libraries on default target
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 28a055bd78
[webconsole] add external CSS support (#1682)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 37f1a55147 encryption type 0,4 by default for server tunnel 3 years ago
orignal 64ec7dd559 narrow down random range 3 years ago
orignal 367df4d0db RAND_bytes from random router selection 3 years ago
orignal da7e41c188 use Tag<64> for ratechet tags 3 years ago
R4SAS d88fe203e1
[tunnels] count outbound traffic for zero-hop tunnels
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 1e01c30e63 set pool for zero-hops tunnels 3 years ago
TomasGl b16b753ed2
Change default irc server to IRC ILITA (#1677) 3 years ago
orignal 7a55d1fc38 don't insert garlic tag for short tunnel build reply if the same router 3 years ago
orignal f8623b6121 consistent path for explicit peers 3 years ago
orignal 9a3c22f47d don't encrypt ShortTunnelBuild and ShortTunnelBuildReply if on the same router 3 years ago
orignal e68cff8bba try routers before random router 3 years ago
orignal 513493fa78 fixed typo 3 years ago
orignal a6937c792f more precise router selection 3 years ago
orignal 99c7d5c23a don't create enryptor for ECIES record encryption 3 years ago
orignal cd8e8970de NTP request through compatible address 3 years ago
orignal 26d5ced2ef optimal padding for one-time messages 3 years ago
orignal c7234f705a let NTCP sync through ipv6 3 years ago
orignal c153471c49 use short tunnel build if possible 3 years ago
R4SAS 28369faa00 [debian] fix tabulation in patch 3 years ago
R4SAS 445c5f47ae [debian] update patch for upnp 3 years ago
R4SAS 7078ca53c3 [debian] update patch for upnp 3 years ago
orignal d6ce5f9fa1
Merge pull request #1669 from eyedeekay/c-wrapper-libi2pd-api
C wrapper for part of the libi2pd api
3 years ago
orignal f28024cfe8 decline transit tunnels from short tunnel build message 3 years ago
orignal 911ab9813e handle encrypteed I2NPShortTunnelBuildReply in destination 3 years ago
orignal cfbf5862f9 set pool for tunnel before build 3 years ago
orignal 5cb1f5986d use msgID from ECIESx25519 block 3 years ago
orignal 0b14c810fb handle ShortTunnelBuildReply 3 years ago
orignal c2334db8f8 correct reply key for short tunnel build record 3 years ago
orignal 4807092df6 fixed typo 3 years ago
orignal bdc1107c96 correct message type for ShortTunnelBuild 3 years ago
orignal db9223b0d5 set minimal version for floodfill to 0.9.38 3 years ago
orignal 6ecfe0789f don't allocate payload buffer for every single ECIESx25519 message 3 years ago
orignal a37cf058cd router with expired introducer is still valid 3 years ago
orignal f4902e6642 eligble floodfill must be reachable by ipv4 3 years ago
orignal 5d022c25ba don't send datetime for one time key message 3 years ago
orignal 0cd9f1b002 precalculate padding sizes 3 years ago
orignal cd0751d3f1 padding block for message for router 3 years ago
orignal a1d1a5df74 datetime block for message for router 3 years ago
orignal 197f13f9c0 rollback 3 years ago
orignal 41bfc7899d keep own RouterInfo in netdb 3 years ago
orignal 2c129b6d39 create and handle short tunnel build reply 3 years ago
orignal dbe427d5eb set reply code for short tunnel build messages 3 years ago
R4SAS 3e281d4790
Update README.md 3 years ago
orignal 15c3d46492 encrypt inbound tunnel build message for short tunnel build only 3 years ago
orignal 6a467a09bd fixed build error 3 years ago
orignal ba1b8c7c2b WrapECIESX25519MessageForRouter wihout session 3 years ago
orignal 1e9eb30aa3 garlic encryption of inbound tunnel build message 3 years ago
orignal d47bf1bada different tunnel build record size 3 years ago
orignal 59dd60f5cb genarate keys in CreateBuildRequestRecord 3 years ago
orignal c02a0c4da9 process DELAY_REQUESTED option 3 years ago
orignal 84f6024cc9 locate record to build inside CreateBuildRequestRecord 3 years ago
orignal d73b42b726 extract ret code per hop 3 years ago
orignal ed0c2e68a5 DecryptRecord per tunnel hop 3 years ago
orignal 847225c6bf more yggdrasil reseeds added 3 years ago
orignal a6294df9e8 decrypt one-time message encrypted with tag on router 3 years ago
orignal 431265a86a update orignal's certificate 3 years ago
orignal 4255c4901d orignal's reseed ceritifcate 3 years ago
orignal 9000b3df4e KDF for short tunnel build messages 3 years ago
orignal a717542733 update yggdrasil reseed to 0.4 3 years ago
orignal aace644815 added ShortECIESTunnelHopConfig 3 years ago
orignal 0ae170531e different ElGamal and ECIES hops configs 3 years ago
idk 5d01ee9581
Also add the languages to the linker flags in the api.go file 3 years ago
orignal 8b35ce3320 separate decryption between own record and other records 3 years ago
r4sas ff0e23d2c4
[cmake] use GNUInstallDirs for libraries destination path (#1672)
Signed-off-by: r4sas <r4sas@i2pmail.org>
3 years ago
idk d62d2ed269
resolve merge conflicts 3 years ago
idk abee29719d
fix go linking 3 years ago
orignal 5781335814 save and check last stream 3 years ago
R4SAS f036b8df2d
[i18n] update translatable strings (remove douplicates)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 25f63ac22a create different I2NP tunnel messages for endpoint and non-endpoint 3 years ago
R4SAS 12d6f03dc9
[i18n] add language changing at runtime in webconsole
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 6d2c9e367b
remove unused CI and docker files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 66422d6d83 double size tunnel message 3 years ago
orignal b9476791f4 eliminated extra I2NP messages for fragments 3 years ago
R4SAS 9fb8e8a582
[cmake] build translations as library
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 377a50fa13
[make] build translations as library
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS da20cae25c
[webconsole] urldecode domain for registration string generator
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal d0c5732e16 eliminate extra lookups for sequential fragments 3 years ago
idk f9d9aa0306
move wrapper code to own directory 3 years ago
idk f5db34b98b
C_InitI2P is compatible with more things if it passes argv by reference, it would appear. So to pass arguments to InitI2P you need to turn them back into char* argv[] by tokenizing them and copying them into an array which you then pass to InitI2P from C_InitI2P. The Streaming and Destination Creation parts need to have wrappers for over Identity.h, Streaming.h to be useful so remove them. 3 years ago
orignal 3c07665479 use unordered_map for incomplete messages 3 years ago
orignal f7f50d049b reduce short tunnel build record length 3 years ago
R4SAS 7d51b4c6ed [i18n] pull ukrainian translation from crowdin (closes #1666)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 35ba16ff3b fixed #1665. cast to int64_t 3 years ago
R4SAS 6971b1e9da fix typo in config option description
Kudos @iBicha
https://github.com/PurpleI2P/i2pd/pull/1662#pullrequestreview-687850246

Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 84d987810f
add afrikaans in config example 3 years ago
orignal fed04c1a19 requsted router to send to if not in netdb 3 years ago
orignal f5e7d87f5b don't disable floodfill if still reachable by ipv6 3 years ago
orignal 6ca28adcbb set address caps and available transports for new address 3 years ago
R4SAS 8e5d2e1b73
[readme] add gha container build badge 3 years ago
R4SAS e8ad7b4f79
rework of storing certificates path (#1642)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS d3a49e513c
remove repeatable type definition, add include (#1642)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 5bfab0a796
add certsdir option (#1642)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
idk 739d1aa9e9
Merge branch 'c-wrapper-libi2pd-api' of github.com:eyedeekay/i2pd into c-wrapper-libi2pd-api 3 years ago
idk e575c6e94d
Merge branch 'PurpleI2P:openssl' into c-wrapper-libi2pd-api 3 years ago
idk 7bc2e74683
Get it to build from go build 3 years ago
orignal 2185019b59 check if router is reachable by transport before obtaining address 3 years ago
orignal 5d097651c1 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 3 years ago
orignal 81c83f0d54 pick ECIES routers only for non-x64 3 years ago
idk 5013ce5649
Try and figure out why the C Compiler thinks it needs to find iostream when the C++ library has already been compiled. Make the makefile aware of variables in the environment 3 years ago
R4SAS 5e11a03f0a
[docker] fallback to alpine 3.13
https://wiki.alpinelinux.org/wiki/Draft_Release_Notes_for_Alpine_3.14.0#faccessat2
3 years ago
R4SAS e14d358420
[docker] add debug commands
Adding `g++ -dumpmachine` command on build stage to figure out why docker hub is unable to build container.
3 years ago
R4SAS 82bb3a9b25 [i18n] remove comment line in afrikaans
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 669720d8f5
[gha] build and publish release containers 3 years ago
idk 45ef6cba9d
Un-mangle Destination in case we need to somehow pass one to DestroyLocalDestination,RequestLeaseSet, etc 3 years ago
idk 3330d2bb0c
Also Extern Identity, Destination, Streaming headers 3 years ago
R4SAS a97d2bbb63
[gha] publish containers to docker hub 3 years ago
R4SAS f56f75bb3f
[gha] add docker building (#1664) 3 years ago
orignal 08a82a0bcd don't try to connect to a router not reachable from us 3 years ago
R4SAS 3dc19bfd31
[gha] docker - disable cache (test) 3 years ago
R4SAS 970f47ce33
[gha] remove context 3 years ago
R4SAS 2ee7ed8dda
[gha] temporary build only amd64 container 3 years ago
R4SAS d058b9a595
[gha] fix repository name to lowercase 3 years ago
R4SAS 1dda832e39
[gha] build docker containers
Build docker containers and publish them to GitHub Container Registry
3 years ago
orignal a6af4908d5 use m_ReachableTransports bitmask 3 years ago
R4SAS 2c7fff077b
[gha] add dist name in package changelog
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 71df1fc4d6
[gha] do not check source archive for deb build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 064ecdb5ec
[gha] do no check source archive for deb build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 8ec4783249
[gha] fetch all history of git repo for packages (needs for describe)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS f9d378f1ce
[gha] add deb building
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS f07241bff7
add deb building
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS a6be32392d
update debian packaging files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS ac594dbd26
Update status badges in README 3 years ago
R4SAS 954711e980 [i18n] pull afrikaans translation from crowdin
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 2ba3f4758a [i18n] move gettext translation template to contrib
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 6be4d508f3 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 3 years ago
orignal dc75868bd3 check Alice's IP address in PeerTest 3 years ago
R4SAS c06a560946
[i18n] use xgettext compatible function format for plural
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 0bacd4df5f
[i18n] update gettext description
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS b91eaf5487
[i18n] update gettext description
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS eebea7b342
[i18n] Add translation source in gettext format
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 29c1173e14
[i18n] fixes in translations
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
idk b962a330ad
Allow passing raw pointers to C wrapper functions, I think 3 years ago
R4SAS 1d973bc3ac [webconsole] remove extra line break
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 631c8c9870 use correct address type for NTCP2 acceptors 3 years ago
orignal bce6685d0c correct check of ipv4/ipv6 address 3 years ago
orignal e412b17f70 don't publish slow tunnel in LeaseSet if possible 3 years ago
orignal a92b93192d reg.i2p for subscriptions 3 years ago
R4SAS 8708a0076f fix build with boost < 1.55.0 (closes #1661)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 83fd289e46 don't re-create noise state for every message 3 years ago
idk ed53cbb7b7
OK that's my first working C wrapper, but I don't yet know how to do anything other than initialize, start, and stop a router 3 years ago
orignal 3b051dbba3 send OutboundTunnelBuildReply 3 years ago
acetone 8e4781b0f7
tbytes in WinApp (#1660) 3 years ago
acetone d599502b1a
1000Gb+ display 3 years ago
orignal 8571830485 create transit tunnel and reply for short tunnel build 3 years ago
acetone 48d9a03aa8
tbytes in WinApp 3 years ago
orignal 5fb426b336 decrypt and encrypt reply for short tunnel build message 3 years ago
orignal d752a83eb5 handle i2cp.dontPublishLeaseSet for all destinations 3 years ago
orignal e740d5fc4f try to pick non-slow tunnel 3 years ago
orignal 8e3e35a36d decrypt short request record 3 years ago
orignal 5ce9c0f1e2 build new tunnels instead slow 3 years ago
orignal ef8c4389e1 reachable transports added 3 years ago
R4SAS 0547d590e1
fix typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS be31640010
fix ipv6 preference on linux
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 39319853ab
[i18n] add Turkmen translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS ed42948051 prefer public ipv6 instead rfc4941 (closes #1251)
Wokrs only on linux-based systems. Not tested on other *nix systems, and
not works on windows.

Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal a0e545a6f1 always create new tunnel from exploratory pool 3 years ago
R4SAS e77e383efa
[docker] add UPnP at compile time (closes #1649) 3 years ago
orignal 8ce5ceef59
Correct transaltion for "Firewalled" 3 years ago
R4SAS 3a53e049bd
[gha] switch ubuntu to 18.04
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 5011ecaaa6
[i18n] fix language selection
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 35b1842a72
[gha] add cmake build on ubuntu
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 0292227a6b
[cmake] switch to glob instead filling sources list
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS ebce1e34d8
[i18n] enable Ukrainian in source
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS cc1244126c
[i18n] enable Ukrainian in source
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
Artem M bdf63cf82c
[i18n] add Ukrainian (#1658) 3 years ago
Artem M 0275f7f574
[i18n] fix two typos in the russian translation (#1659) 3 years ago
R4SAS 779f2fa451
[i18n] rework localization system
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 1a4250d8cc [i18n] update russian translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 08fafe267a rekey all routers to ECIES 3 years ago
orignal d06924b339 LeaseSet type 3 by default 3 years ago
orignal 585116a51f
XMR added 3 years ago
R4SAS b676d7034f
[i18n] update translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 69a0fe3040 pass arg as reference 3 years ago
R4SAS 5207dd4c9e
[gha] update freebsd action 3 years ago
R4SAS 919bf4e144
[i18n] add cmake build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 7ed440ba75
Merge pull request #1657 from PurpleI2P/i18n
I18n
3 years ago
R4SAS 2db035d23c
[i18n] fix addresshelper
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS a4b84517dc
[i18n] rename Russian translation, fix typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS e687773b41
[18n] translate webconsole
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS df66c2d2dc
[i18n] translate HTTP proxy
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal f321eb66c0 rename DatabaseLookupTageSet to SymmetricKeyTagset 3 years ago
R4SAS 80b44fc9a9
Support multilang, update code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 0e68fe4a57 [i18n] start multilang support for webconsole
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 59b471b9a2 i2cp.leaseSetPrivKey for HTTP and SOCKS proxy 3 years ago
orignal f22eaa6db5 2.38.0 3 years ago
R4SAS e37244fa0d
remove deprecated options from config file example
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS c359c6e634
update config file example, add v6 status to windows daemon window, code cleanup
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal d299cbaabd Add/Remove subsession 3 years ago
orignal 2b22bfadbc show version in hidden content 3 years ago
orignal baec22610e always set expiration time for NSR tagset 3 years ago
orignal 43b587636b delete tags of termiated session right away 3 years ago
orignal c6cdb26f47 reduce range for extra tags 3 years ago
orignal 1285e30b3e more pre-calculated x25519 3 years ago
orignal a8e1cd9a13 don't throw exception if local bind fails 3 years ago
orignal d6f5640685 attach updated LeaseSet to ECIESx25519 incoming sessions 3 years ago
orignal 79dbf2a43e request encrypted LeaseSet if expired 3 years ago
orignal 5ad4c2a65e run ipv6 peer test again if still testing 3 years ago
orignal fffa550bb0 SAM subsessions 3 years ago
orignal 0b9cb4e75b check identity and signature length for SessionConfirmed 3 years ago
orignal 7f143a7f23 support EdDSA for blinding 3 years ago
orignal d8d8a68814 rekey all routers but floodfills 3 years ago
orignal 4018cf9d76 SAM single and master sessions 3 years ago
orignal bd33ac202f handle hostname for STREAM CREATE 3 years ago
orignal e091eba831 don't cleanup ipv6 introducers list twice 3 years ago
orignal 4a0dbec4fb recognize non-published NTCP2 address 3 years ago
orignal 90dee900f0 fixed crash 3 years ago
orignal 94555b9c43 don't select next introducers from existing sessions 3 years ago
orignal db93a7315f find new introducers to connect 3 years ago
orignal 7a19533380 reuse current introducers if no more available 3 years ago
orignal 9d79b26506 check if port if specified 3 years ago
orignal b43a9cc80d handle master session creation 3 years ago
orignal b5618af308 find all introducers at the time 3 years ago
orignal 9c8c3b9174 select few introducers at the time 3 years ago
orignal 01e591b261 find ipv6 intrioducer session 3 years ago
orignal 060e30d283 select ipv6 random introducer 3 years ago
orignal ad019da553 publish ipv6 introducers 3 years ago
orignal 69afd3a1da
Merge pull request #1651 from acetoneRu/openssl
Уточнение про логирование в Windows
3 years ago
acetone 7978adc577
Уточнение про логирование в Windows 3 years ago
orignal ca77ca6ef0 reseed from compatible address 3 years ago
orignal d5b61ed544 select different routers for peer test 3 years ago
orignal 5edb256990 check if our external IP is valid 3 years ago
orignal 74d0c04314 ipv6 address for relay reponse and relay intro 3 years ago
orignal 39d4464be0 make sure that introducer or peer test router is reachable by SSU 3 years ago
orignal be48dc6e87 pick correct local address for intro key 3 years ago
orignal 2783337284 require ipv4 for IBGW 3 years ago
orignal 727743979c
Merge pull request #1648 from acetoneRu/openssl
SAM section fixed
3 years ago
acetone 4543e14c57
SAM section fixed 3 years ago
orignal 83fc1b0b8e support b32 and b33 addresses in STREAM CONNECT 3 years ago
orignal df858d9143 publish iexp 3 years ago
orignal ac47c9c673 don't check U cap 3 years ago
orignal b9a2d5df02 send HolePunch back based on actual address type 3 years ago
orignal 3e873f88c9 don't drop introducers without iExp 3 years ago
orignal 277cef5ec4 eliminate cost field 3 years ago
orignal 5c9b478e46 published field for SSU addresses 3 years ago
orignal ff89edf127 pick random introducer 3 years ago
orignal 2cc9791bf2 exclude already expired introducers 3 years ago
orignal 67b32005f6 check if host if unspecified 3 years ago
orignal 0f166973ca check ureachable cap and actual introducers separately 3 years ago
orignal 4f3333c841 don't check range ffor unspecified address 3 years ago
orignal bea384abea recongnize v4 and v6 SSU addresses without host 3 years ago
orignal 43033695f6 select apropriate address for peer test 3 years ago
orignal 51ef7ef61c don't publish LeaseSet without tunnels 3 years ago
orignal 823b499a02 remove already expired LeaseSets 3 years ago
orignal bb5ed0b40c assign correct 6 or 4 cap to unpublished address 3 years ago
orignal 94ca2514af set zero expiration timeout if no tunnels 3 years ago
orignal 5412352dec publish ipv6 introducers for ipv6 addresses 3 years ago
orignal c94e8c7df4
Merge pull request #1646 from acetoneRu/openssl
reg.i2p to subscriptions
3 years ago
acetone 094541caa6
reg.i2p to subscriptions 3 years ago
orignal 8c59977e34
Merge pull request #1645 from acetoneRu/openssl
Configuration file example updated
3 years ago
acetone 881bca6ae3
Depricated "nat" deleted 3 years ago
acetone 22865f8ee4
reseed.yggurl and persist.addressbook added 3 years ago
acetone f3b728d828
Yggdrasil configuration added
[meshnets] section
3 years ago
orignal bd7328345f Don't change Yddrasil address if router becomes unreachable through ipv6 3 years ago
orignal 25eae3c116 return relay tag for ipv6 introducer 3 years ago
orignal 5cca5472e6 don't handle unsilicited HolePunch 3 years ago
orignal 8462d382f4 don't create SSU session for HolePunch 3 years ago
orignal 2b0d18a6d7 don't change router status from ipv6 3 years ago
orignal edf3b7e2fc set X bandiwth for floodfill by default 3 years ago
orignal 167d3a0e3c don't create BN_CTX for ECIES tunnel build record decryption 3 years ago
orignal 86415bc61f publish introducer cap for ipv6 address 3 years ago
orignal a6ea37a21e set ipv6 address caps depending on peer test 3 years ago
orignal 3695aa924b doesn't send peer test to a reserved address 3 years ago
orignal 9e050d1a23 peer test for ipv6 3 years ago
orignal 34eee2fc26 fixed #1644. check leaseset buffer size 3 years ago
orignal ac10f3055d pick correct local SSU address for sending peer test 3 years ago
orignal 991b74f036 bind ipv6 or yggdrasil acceptor to specified address 3 years ago
orignal 589049ef0f connect to ipv6 address through introducer 3 years ago
orignal 6b0c7c2313 handle ipv6 address in RelayResponse 3 years ago
orignal a9c7d0d598 common ExtractIPAddressAndPort 3 years ago
orignal ef1dfb153c handle ipv6 address for RelayIntro 3 years ago
orignal ff9ee5873f post LeaseSet creation to I2CP destnation's thread 3 years ago
orignal a7b56bbbb7 publish Yggdrasil address when enabled 3 years ago
orignal 820a365474 select random peer for first hop for outbound tunnel if number of connections < 100 3 years ago
orignal 1d5d06f731 find actual router for peer 3 years ago
orignal 43d458cf72 publish and upublish NTCP2 and yggdrasil addresses separatly 3 years ago
orignal 436a3e7f54 2.37.0 3 years ago
orignal 7015bad905 2.37.0 3 years ago
orignal cf8665748b network sattus Mesh added 3 years ago
orignal 1b8da90cbb more precise compatibility check 3 years ago
orignal 6012585067 eliminate false positive symmetric NAT 3 years ago
orignal f162876600 insert ipv4 address if enabled back 3 years ago
orignal 6555ae5b0a support authorization for reseed proxy 3 years ago
R4SAS f5af059ef4
[webconsole] add submission of address registration line to reg.i2p
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS cb8651ec68 [win32] drop service code, fix start with daemon option. Throw notification when unable to parse config
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 7c0b0a4e3e common HTTP basic authorization string 3 years ago
orignal 880d1a7ccd NTCP2 proxy with authorization 3 years ago
orignal 744b25190a don't set proxy if ntcp2 is disabled 3 years ago
orignal 3792bb4928 delete sig buffer 3 years ago
R4SAS 9049902ced [webconsole] add address registration line generator
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 5f93dc72fd convert ifname* params to address* 3 years ago
orignal 09dadd7e01
Merge pull request #1640 from brain5lug/openssl
logging opimization
3 years ago
orignal 60b92f98db OBEP must be ipv4 compatible 3 years ago
orignal 97f315d488 set correct 4 and 6 caps for unreachable addresses 3 years ago
brain5lug f3676d7f18 logging opimization 3 years ago
orignal 742dbdb68a rekey low badwidth routers to ECIES 3 years ago
orignal 2d59c968ca don't publish NTCP2 address connected through proxy 3 years ago
orignal ad22247c9e start other acceptors if connected through a proxy 3 years ago
orignal f38920c338 Status: Proxy 3 years ago
orignal 8f90b21a5d fixed typo 3 years ago
orignal ff0e6813c6 fixed typo 3 years ago
orignal fa5e4d57fd correct caps for SSU address without host 3 years ago
orignal 876973f071 remove coreVersion 3 years ago
orignal b994af9209 check reachability of floodfill to request from 3 years ago
orignal 1f6cde652e check caps for SSU address 3 years ago
R4SAS 3bf6db1c08 enable yggdrasil address finding for android
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal e70ffc9d7c re-shedule introducers updates if router becomes firewalled 3 years ago
orignal 065cfe3b9d separate ratchet session for ECIES router 3 years ago
orignal def9873a70 request multiple introducers at the time 3 years ago
orignal 618aa26454 allow some unreachable floodfills 3 years ago
orignal 924a7bc533 use connected peers if others not available 3 years ago
orignal ef85277a1b select reachable routers for one hop tunnels 3 years ago
orignal 876375f2c3 precise bandwidth limit 3 years ago
orignal f70ee480ba check connectivity between peers for tunnel 3 years ago
orignal 6d88c3ab05 Symmetric NAT error 3 years ago
orignal 57c969b0ed constants for cost 3 years ago
orignal ae58a7007b different cost for direct or with introducers SSU address 3 years ago
orignal 11c924bbe7 publish and handle SSU addreses without host 3 years ago
orignal 8bab4f60ef open socket before bing 3 years ago
orignal bef9a54f4a bind SSU socket to specified address 3 years ago
orignal 288b19c3f7 bind NTCP2 ipv4 acceptor to specified local address 3 years ago
orignal 40f7e9d33e separate decryptor for tunnel builds and floodfill requests 3 years ago
orignal fab53dda66 fixed typo 3 years ago
orignal a4e8bf9857 bind NTCP2 connections to specified address 3 years ago
R4SAS 2cdf84cdab [actions] upload windows artifacts 3 years ago
orignal fbe83f729d don't try to send to unreachable router 3 years ago
R4SAS 4371a084ec
check for pubkey in X25519Keys::Agree
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal d13f58088a Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 3 years ago
orignal f75bef7c03 don't set local address if not specified 3 years ago
R4SAS 3d7e93a688
systemd: use SIGTERM instead SIGQUIT, indent UPNP code, make client target
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal a4dda304d2 cancel connect timer upon SessionConfirmed 3 years ago
orignal 124c3ef2d7 always publish SSU port 3 years ago
orignal c3a2fca76a 4 or 6 caps for non-published addresses 3 years ago
orignal b60ebfe1c6 parse '4' and '6' address caps 3 years ago
orignal 1d7639b3f4 caps per address 3 years ago
orignal 2d972752ff lookuplocal 3 years ago
orignal 616f0b2a21 address parameter for server tunnels 3 years ago
orignal 94659ba890 create ipv4 and ipv6 NTCP2 addresses separately 3 years ago
orignal d65bc068de create ipv4 and ipv6 NTCP2 addresses separately 3 years ago
orignal 1ca0354cf2 find NTCP2 address by static key. Don't make router unreachable if can't connect by NTCP2 3 years ago
orignal b1fcd4d27b show actual IP addresses for proxy connections 3 years ago
R4SAS 74aa07eba8
[actions] update freebsd action 3 years ago
orignal d1a98212ee 2.36.0 3 years ago
orignal 75a31c79ae don't process SSU messages after termination 3 years ago
R4SAS da0b36cb91
enable miniupnpc support by default in debian/ubuntu
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal aa206d034d fixed #1373. Limit number of tunnels by 16 3 years ago
orignal 765ab60753 try to reseed if no compatible routers in netdb 3 years ago
orignal 44e4ec573d enable NTCP2 transport for newly created routers 3 years ago
R4SAS 0ed793d6d0
[readme] add links to new android and qt repos
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 272e25ff07
[actions] remove qt build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 63127ab181
add yggdrasil address search for windows
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 004f3532a0
move android binary build files to contrib
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS abe1af7b4f
moved qt and android sources inn separate repositories
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 01df1647bc
[httpproxy] add viewport and update styles on error
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 9d8eaf0ccb
[win32] dont create notification when taskbar (explorer) restarted
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 7e4c33d27e resend RouterInfo after some interval 3 years ago
orignal c164601acf reseed from clearnet only if ipv4 or ipv6 is enabled 3 years ago
orignal 3b32da4f5c don't disable NTCP2 address if Yggdrasil address is presented 3 years ago
orignal 1bc3de8df4 add Yggdrasil address without NTCP2 3 years ago
orignal 374e0cbbc3 enable NTCP2 server for Yggdrasil 3 years ago
orignal 313921da56 publish and request through exploratory tunnel if floodfill is not reachable 3 years ago
orignal 2d0e219197 add Yggdrasil adddress even if NTCP2 is not published. Correct reachable capacity 3 years ago
orignal dc64d1738a try both ipv4 and ipv6 SSU addresses if presented 3 years ago
orignal 89e8d99294 check availability of particular address 3 years ago
orignal 66a238045f Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 3 years ago
orignal 33b82b5669 check transport compatibility with peer before connecting 3 years ago
R4SAS f59d509b15
fix rebase result build issue
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
R4SAS 6966539b86 reindent Datagram, Daemon, update default subscription in config example
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 0e5dc15005 create Yggdrasil address for new router 3 years ago
orignal a74f685a5d check local address 3 years ago
orignal 05c7aacfa5 check for NTCP for yggdrasil address 3 years ago
orignal ace80c29e7 meshnets.yggaddress added 3 years ago
orignal bfb1380dd2 don't update Yggdrasil address from SSU 3 years ago
orignal ea19802d3f update right ipv6 only 3 years ago
orignal fef4f13b8f don't insert Yggdrasil address twice 3 years ago
orignal c4fc0f4ecf add Yggdrasil address 3 years ago
orignal ba3acdac75 NTCP2 transports through the Yggdrasil 3 years ago
orignal aad2d68edb NTCP2 transports through the Yggdrasil 3 years ago
orignal 9e5935aea5 NTCP2Mesh added 3 years ago
orignal 129b4a2135 don't support NTCP1 address in RouterInfo 3 years ago
orignal 82649ab2a7 IsYggdrasilAddress added 3 years ago
orignal 1ba5d25819 correct detection of chunked response 3 years ago
orignal daa3f8699b don't detect Yggdrasil for android 3 years ago
orignal df7fda9e0c support ratchets for shared local destination 3 years ago
orignal 484f69f16b try to select reachable router of inbound tunnel gateway 3 years ago
R4SAS 7c8280934a
update addressbook subscriptions
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal 85902b358a remove [] from yggdrasil reseed address 3 years ago
R4SAS 5931cb59ab fix thread setname on NetBSD
Signed-off-by: R4SAS <r4sas@i2pmail.org>
3 years ago
orignal fd73aab7d0 acetone's certificate 3 years ago
orignal d13fbe5549 support reseed throught the Yggdrasil 3 years ago
orignal ed4c00e4f4 check yggdrasil ipv6 range 3 years ago
orignal 07282ec39f get local yggdrasil ipv6 address 3 years ago
orignal 2d998aba43 fixed typo 3 years ago
orignal 2e0019c8c8 check if NTCP2 address is valid before connection attempt 3 years ago
orignal 96e9608036
Merge pull request #1623 from rex4539/fix-warnings2
Fix clang warning
3 years ago
orignal 9d5bb1b2b6 drop routing path for LeaseSet resend 3 years ago
Dimitris Apostolou 67dab9b6d2
Fix clang warning 3 years ago
orignal 6fc5f88a3b dump addressbook in hosts.txt format 3 years ago
orignal e0cec79ad6 try both ipv4 and ipv6 NTCP2 addresses if presented 3 years ago
orignal 1a9e11d86d don't send updated LeaseSet through a terminated session 3 years ago
orignal 1235d18d67 pass address to NTCP2 session 3 years ago
orignal 8f25b66760 limit tunnel length to 8 hops 4 years ago
R4SAS 2bc0850b0f [android] add refresh on swipe in webconsole
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 29176dd9bf count last send time for expiration 4 years ago
orignal aedcd1bcc0 remove tag after tagset expiration 4 years ago
orignal b1262d54de don't detach ECIESx25519 session from destination 4 years ago
orignal bc4a97774f strong pointer to session for receive tagset 4 years ago
orignal ee3cd44f97 ReceiveRatchetTagSet 4 years ago
orignal 726bd0d63b check if x25519 key is valid 4 years ago
orignal ce9640773c Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal 7ce92118e4 handle follow-on NSR messages 4 years ago
R4SAS e12c5fe007
Merge pull request #1601 from gxcreator/openssl
Docker: Move DEFAULT_ARGS to Dockerfile .
4 years ago
orignal 86ff0d86db check if new tag was created 4 years ago
orignal b4236b04c6 leaset creation timeout 4 years ago
orignal d34dc397e8 changed to 320 tags max 4 years ago
orignal f2e4d5f06c trim behind not affter max generated tags 4 years ago
orignal da7e2f2580 don't send message through non-established session 4 years ago
orignal e07a20a771
Merge pull request #1608 from nonlinear-chaos-order-etc-etal/openssl-custom
qt: log level ui control now synced with core and log pane ui at runtime
4 years ago
user ae1b1da342 qt: log level ui control now synced with core and log pane ui at runtime 4 years ago
orignal a61d7fe115 set correct NAME for NAMING REPLY 4 years ago
orignal b4d1e89696
Merge pull request #1606 from nonlinear-chaos-order-etc-etal/openssl-custom
fixes many i2pd_qt issues
4 years ago
user a0d90717c3 qt: i2cp server page is now shown, work towards #914 4 years ago
user 5c2f1f36e8 qt: sam session is now shown at qt->sam sessions, work towards #914 4 years ago
user 0b084956e6 qt: stream.kill hrefs done - step to completion of #914 4 years ago
orignal 8c61e7d227 replace LeaseSet completely if store type changes 4 years ago
user d7342586a6 qt: fixes #1593 4 years ago
user 242e3d007c qt: fixes #1529 4 years ago
user d4b6485102 qt: small improv 4 years ago
user 370ab6307a qt: fixes #1581 4 years ago
user 83b10fba62 qt: added assert.h - it is needed for ci circumstances 4 years ago
user 1921bce4c7 Merge remote-tracking branch 'upstream/openssl' into openssl-custom 4 years ago
user 669fb62a54 qt: fixed great ui pains with tunnels editing 4 years ago
orignal 1a5920ee47
Merge pull request #1605 from nonlinear-chaos-order-etc-etal/openssl-custom
qt: visual fixes + fix for #1582
4 years ago
user 9c6e3ff1d7 qt: fixes #1582 4 years ago
user ca78601ada qt: visual fixes 4 years ago
orignal 2edce12759
Merge pull request #1604 from nonlinear-chaos-order-etc-etal/openssl-custom
qt: fixes #1180
4 years ago
user ccc604c0f4 qt: fixes #1180 4 years ago
user d3bf8c2417 data: ignored *.tmp.xml 4 years ago
user dc774f0f94 Merge remote-tracking branch 'upstream/openssl' into openssl-custom 4 years ago
orignal f2059947bf
Merge pull request #1603 from nonlinear-chaos-order-etc-etal/openssl-custom
qt: added about box
4 years ago
user eccd5b6ff0 qt: removed a few debug log lines 4 years ago
user 776dc7ec52 qt: about box fixed for older qt5 4 years ago
user 082c4f1104 qt: added about box 4 years ago
orignal 06a7e181cd ECIES for new routers 4 years ago
orignal bf91e16b5d gererate specified number of tags if misssing tag 4 years ago
orignal 65945b3462 correct offline signature size for close packet 4 years ago
gxcreator 31f0c35077 Docker: Move DEFAULT_ARGS to Dockerfile . 4 years ago
orignal fc2dc9a019 cumulative ACK bitfields 4 years ago
orignal 04645aacc4 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal c91a8711e3 encrypted requests to ECIES floodfills 4 years ago
R4SAS 7373dae026
[avx] check if c++ target supports AVX (closes #1600)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS ca3b819151
[avx] check ig c++ target supports AVX
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal ba79b94e06 try to generate missing ECIESx25519 tag in last tagset 4 years ago
R4SAS bfc3acb834
use correct function for thread naming on OpenBSD
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS ac67cd7f9a
add FreeBSD builder for GHA (#1595) 4 years ago
R4SAS 9a2c6a7619
move thread naming to util
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 3100d4f902 move thread naming to util
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal aace200899 don't create paired zero hops tunnel 4 years ago
orignal a843165cb4 try ratchets tag first 4 years ago
R4SAS 36473e3889 add naming to threads
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal e2fcab34b7 deccrypt and handle garlic message for ECIES router 4 years ago
orignal abdf92c084 encrypt message for ECIES router 4 years ago
orignal 32fc6482cc moved Noise initializations to Crypto.cpp 4 years ago
R4SAS ce14ea6fe5
[windows] add file version to installer
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 2f57013e02
[qt] update project file
Some build systems didn't create required folders for object files, so create them manually with additional call of `mk_obj_dir` target.
4 years ago
R4SAS ad84944d20
[make] change AES support check 4 years ago
orignal 0ab95b1b87 2.35.0 4 years ago
R4SAS 58153c3579
[webconsole] fix content block width
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 746f53ba07 use SendBufferQueue for queued messages from I2P 4 years ago
orignal ff971563db cleanup queue after buffers deletion 4 years ago
orignal 242fb7db14 terminate I2CP session if destroyed explicitly 4 years ago
orignal ad36738f57 detach session from destination upon termination 4 years ago
orignal c833b16544 check if session expired before generating more tags 4 years ago
orignal 1c5b350c2b TCP_QUICKACK 4 years ago
orignal 9301e39af7 minimal version for floodfill 0.9.28 4 years ago
orignal 86e3b977e4 check I2CP message size 4 years ago
R4SAS bc330ff0ea update makefiles, license year
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 771480e368 send queue for incoming I2CP messages 4 years ago
orignal c875ff923a random intro key 4 years ago
orignal 3dfb44de31 exclude DSA floodfills 4 years ago
R4SAS 2266c3877c
update reseeds
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal f4486bc075 take intro key from right address 4 years ago
orignal 0436a65baa upddate DSA router keys 4 years ago
orignal 30d6bd144b don't replace an adddress by one with DSA signature 4 years ago
orignal d8381e9486 disable encryption to ECIES routers 4 years ago
orignal feaecbe177 own local destination for each 'transient' 4 years ago
R4SAS 85d796f906
[actions] obj directories before make on windows 4 years ago
R4SAS 0a3af12ee9
[make] track changes in includes
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 3925540517 don't update expired tunnels 4 years ago
orignal 3b630fe546 fixed race condition 4 years ago
orignal c69c4ae8a0 don't publish too fast 4 years ago
orignal b4369470cb publish updated RouterInfo 4 years ago
orignal 4a44b18b97 fixed typo 4 years ago
R4SAS 2bd6daeb8d disable aes/avx for winxp by default 4 years ago
R4SAS 1ae98b7fe1 [webconsole] graceful timer for windows 4 years ago
orignal 44ca315c75 don't build tunnels for all pools at the time 4 years ago
orignal af20b13c7a create paired inbound tunnels if no inbound tunnels yet 4 years ago
orignal 1f6be38145 wait for publish confirmation or publish to another floodfill 4 years ago
orignal 8b3a7486c7 rename CRYPTO_KEY_TYPE_ECIES_X25519_AEAD_RATCHET to CRYPTO_KEY_TYPE_ECIES_X25519_AEAD 4 years ago
R4SAS 62cd9fffa3
Automate AES-NI and AVX detection on runtime, make it default on x86-based systems (#1578)
Rework CPU extensions detection code and build with AES-NI and AVX support by default
4 years ago
orignal 7e874eaa7c pre-calculated h 4 years ago
orignal 1c7780a423 garlic clove block for router 4 years ago
orignal 07b77443dd don't handle TunnelBuild message for ECIES router 4 years ago
orignal 4ba1be2dc0 one time garlic encryption for ECIES routers 4 years ago
orignal 6362a7bba5 decrypt garlic on ECIES router 4 years ago
orignal 1740715c00 correct reply key and IV for ECIES record 4 years ago
orignal 21501cbf81 correct MixHash after decryption 4 years ago
orignal d5f3d6111e correct tunnel build record size to decrept 4 years ago
orignal bd04f92087 correct public key for ECIES address 4 years ago
orignal 942b2b05e7 correct key for AEAD decryption 4 years ago
orignal b8064b9b4b copy noise state 4 years ago
orignal f94d03465a don't create transit tunnel if decyrption failed 4 years ago
orignal 4e7aafeec1 send transit tunnel reply for ECIES router 4 years ago
orignal d820b8036e correct transient signature length 4 years ago
orignal 3907c17cf5 handle TunnelBuildMessage for ECIES router 4 years ago
orignal b12fa97a38 32 bytes private key for ECIESx25519 4 years ago
orignal b9b431e82d Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal 9f2a2e44a3 common MixHash and MixKey 4 years ago
R4SAS aaf6c1ea8b
[RPM] fix build on fedora >= 33
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS b2f0278180
[RPM] fix build on fedora >= 33
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 530eba1b91
[RPM] fix build on fedora >= 33
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 812d312a9e
[RPM] fix build on fedora >= 33
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 5d256e1d80 don't allow STREAM CONNECT and STREAM ACCEPT in command session 4 years ago
R4SAS d02a0c9b3a
[QT] don't build i2pd with aesni/avx for compatability with arm64
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS bdbd060229
[QT] create obj dirs before building i2pd
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS bf04962994
[QT] change i2pd make command
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 33f2ddb696
[QT] fix build with prebuild i2pd libs
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal e444519889 excluded appcompat 4 years ago
R4SAS a47aa8c282
[actions] build i2pd library before building gui 4 years ago
R4SAS 0c29aeb9be
[actions] add qt gui builder 4 years ago
R4SAS 2b4a91cc80
[actions] Rename worker and jobs 4 years ago
orignal 9ffc4155dd
Merge pull request #1567 from nonlinear-chaos-order-etc-etal/branch2
qt .pro now uses libi2pd.a and libi2pclient.a instead of sources
4 years ago
user 979282a0d4 qt .pro now uses libi2pd.a and libi2pclient.a instead of sources 4 years ago
orignal c63818f355 2.34.0 4 years ago
orignal c400372a79 create new ratchets session if previous was not replied 4 years ago
R4SAS 56f3bdd746
[win32] handle WinAPI errors in SSU
Windows can throw WinAPI errors which are not handled by boost asio

Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal cc0367b079 always send STREAM STATUS reply to STREAM FORWARD 4 years ago
orignal e41bbcb2bb handle SILENT for STREAM FORWARD 4 years ago
orignal b35f43d79e initial implementation of STREAM FORWARD 4 years ago
orignal e9f11e204e check if session is terminated before send 4 years ago
orignal 1b63c9f6ad
Merge pull request #1564 from nonlinear-chaos-order-etc-etal/openssl
android fixes
4 years ago
orignal 21d99e355c MixHash(sepk) added 4 years ago
user f0adbcd5e1 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
user bfcf3cfbf1 Fixes #1563 4 years ago
orignal ef5495bfb2 padding for x25519 crypto key 4 years ago
orignal c93ee0d65d tunnels through ECIES routers 4 years ago
user db3e48a81a android: more logical daemon state changes 4 years ago
user d9b87e877d Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
user b6175132eb android: fix for pre-init jni calls; processAssets moved to a logical place 4 years ago
orignal 57d6c7a3b3 Added TunnelConfig.cpp. Removed CryptoWroker.h 4 years ago
orignal d65a282e9d check routers with non ElGamal encryptions for lookup, publish and tunnel build 4 years ago
orignal 801ecaa41c temporary exclude routers with non ElGamal crypto types 4 years ago
orignal 49bf735c22 don't set destination to routers 4 years ago
orignal cb55944ff6
Merge pull request #1562 from nonlinear-chaos-order-etc-etal/openssl
qt: socks outproxy enabled checkbox added; visual fixes; socks defaults fixes
4 years ago
user 9c225f8d77 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
user 365fce922c qt: socks defaults fixes, socks outproxy enabled checkbox added; visual fixes 4 years ago
orignal fbfc5ecda3
Merge pull request #1560 from nonlinear-chaos-order-etc-etal/openssl
qt: newer options added from docs + visual fixes
4 years ago
user 4001f48a28 qt: visual fixes & more 4 years ago
user 22124c25d1 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
user 17f5bcbd1c qt: newer options added; not tested 4 years ago
R4SAS b7ebb3ea3d
[android] support NetworkCallback for network state changes
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 387830e07a encyption type 0,4 by default for client tunnels 4 years ago
orignal da94d40738 check if session is terminated before receive 4 years ago
orignal 417b5ed6cc handle SSU v4 and v6 messages in one thread 4 years ago
user 005581ef62 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
user 050390c5c4 qt: all new general options added from docs 4 years ago
R4SAS 2648f1ba89
[workflow] install required packages 4 years ago
R4SAS d9d31521f9
[workflow] add windows build 4 years ago
R4SAS 8e24d1b909
[workflow] change options order
Apply name for job, not for step.
4 years ago
R4SAS 36fc0daa12
[workflow] use latest boost from PPA 4 years ago
R4SAS 44d3854a13
[workflow] use sudo when installing packages 4 years ago
R4SAS 1dbc35f13d
fix workflow 4 years ago
R4SAS 11691fb44a
create GH workflow
Add workflow to build on ubuntu with make
4 years ago
orignal acc5592f59 create DH keys for SSU session directly 4 years ago
R4SAS 614921276e
[appveyor] update configuration to support cache (#1559) 4 years ago
R4SAS 3f45a11f12
[SSU] handle ICMP responses
Windows network stack can forward ICMP to socket and simple deleting of
packet can cause socket death. Same thing can happen on other systems
but without socket death.

Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal e3464add50 don't create new tunnels if offline 4 years ago
R4SAS 18bb4a71c2
fix incorrect chars in variable
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 85e9da82b0 [transports] validate IP when trying connect to remote peer for being in reserved IP range
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 99d046ca11
[http] handle WebDAV methods
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 0b372a344c
[webconsole] change error status print format
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal ffa0f0afd9 check network status 4 years ago
orignal e21dac21c8 fixed #1557. don't try to send empty message 4 years ago
user 0108745065 qt: bool optionValuePresent removed 4 years ago
orignal e2a1cd12c3 don't delete unreachable routers if too few 4 years ago
user f6ff232106 qt: crypto type added 4 years ago
user b0c690d836 qt: build* added to .gitignore 4 years ago
orignal 7246624983 list of headers to remove 4 years ago
orignal 471c46ad8e remove some HTTP headers from response 4 years ago
orignal 59032d515b i2p.streaming.answerPings=false by default for client tunnels 4 years ago
orignal d218c9a983 disable ntcpproxy 4 years ago
orignal 243f6e755b restore copyright header 4 years ago
R4SAS 67b76809ea
[appveyor] rewrite mirrorlist after updating runtime
If pacman was updated on runtime update, changes which we domne earlier will be rewrited by config from package
4 years ago
R4SAS 77231bfc6c
[appeveyor] rewrite mirrorlist (testing)
https://github.com/msys2/MINGW-packages/issues/7084#issuecomment-703211308
4 years ago
R4SAS e614226926
[appveyor] change repository disabling way (testing) 4 years ago
R4SAS 65e15d74fc
[appveyor] print mirrorlist (testing) 4 years ago
R4SAS 7ceb81cc83
[appveyor] clean packages cache after disabling mirrors 4 years ago
R4SAS d3f7eea0a3
[appveyor] Disable unavailable repository
Ref: https://github.com/msys2/MINGW-packages/issues/7084
4 years ago
orignal c2f13a1496 some cleanup 4 years ago
orignal faae2709d9 removed NTCP 4 years ago
orignal d595006d1f Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal a8d23b5439 disable NTCP for good 4 years ago
R4SAS cfda807057
[appveyor] use different mirror for keyring
Default repo mirror is not available, changed to other one.
4 years ago
R4SAS c601a2986f
[appveyor] test without manual keyring installation 4 years ago
orignal 8483464aab don't attach our RouterInfo to router's request 4 years ago
orignal dca69e9b6e
Merge pull request #1555 from zamabuvaraeu/patch-1
Update Win32NetState.h
4 years ago
Эрик Замабувараев‐Ёмолкуу 9450dc84da
Update Win32NetState.h
QueryInterface должна увеличивать счётчик ссылок.
4 years ago
orignal 3a2724ec58 single thread for I2CP 4 years ago
orignal ee84291997 handle i2p.streaming.answerPings properly 4 years ago
orignal fd9229c467 ping/pong for streaming 4 years ago
R4SAS ac5a4fe70f
[appveyor] remove tasklist print 4 years ago
R4SAS 873b4f3178
[appveyor] suppress error code 4 years ago
R4SAS beb5d26e6d
[appveyor] kill gpg 4 years ago
R4SAS 221b7cbf76
[appveyor] kill bash before second try
Ok, just waiting for bash termination doesn't works, so lets kill it.
4 years ago
R4SAS 7d34f1e883
[appveyor] add delay before second try 4 years ago
R4SAS 208707c00b
[appveyor] install keyring package without question 4 years ago
R4SAS cb41c04551
[appveyor] install keyring package without question 4 years ago
R4SAS 730c6aff11
Update appveyor.yml 4 years ago
orignal 3d40c7603d Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal dec7a9a01c shared transient destination between proxies 4 years ago
R4SAS 5f42888b61
[appveyor] disable fix introdued in 7864053 4 years ago
orignal 489c38ec5b read Last-Modified 4 years ago
orignal 949fc47f31 two tunnels for shared local destination 4 years ago
orignal 4d85079372 correct addressbook request 4 years ago
orignal 335f9394a5 drop gcc 4.7 support 4 years ago
orignal f939a7b349 reduce variable tunnel build length to 4 4 years ago
orignal 09fdb068d2 Database lookups from ECIES destinations 4 years ago
orignal 024c29b180 eliminate boost/bind 4 years ago
orignal 2b0d1a2190 implement DatabaseLookupTagSet 4 years ago
orignal d0d71c93af set LeaseSet type to 3 for ratchets if not specified 4 years ago
orignal da1e52357f delete symmkey on cleanup 4 years ago
orignal a05a54b38e trim behind ECIESx25519 tags 4 years ago
orignal a0685d804d 2.33.0 4 years ago
orignal 954781262c 2.33.0 4 years ago
R4SAS 0777bad2c3 [webconsole] fix warning, mobile page width
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 3159b06988 reseeds update 4 years ago
orignal e7ff6fbffc don't save invalid addreses 4 years ago
orignal 6fec92c012 shared transient addresses 4 years ago
orignal e50abbb250 avoid replay upon SSU packet resend 4 years ago
orignal 8e25226574 use unordered_map for incomplete and sent messages 4 years ago
orignal 9636d82b37 MixHash for SessionConfirmed processing 4 years ago
orignal c3aa6b9cda use delivery type local if destination is not secified 4 years ago
orignal 3ef8b3dcbb don't send repliable datagram after less then 100 milliseconds 4 years ago
orignal c41554109b change datagram routing path if nothing comes back in 10 seconds 4 years ago
orignal 67b94d3533 unordered_map for RouterInfos and LeaseSets 4 years ago
orignal d52c0633c8
Merge pull request #1544 from wipedlifepotato/openssl
whitelist synonim for accesslist
4 years ago
potatowipedlifereverse 4e4c117023 whitelist synonim for accesslist 4 years ago
wipedlifepotato cb0d30cf42
Merge pull request #1 from PurpleI2P/openssl
pull
4 years ago
R4SAS 2d65402ced [webconsole] update styles
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS e15b2cc5d6 [webconsole] rework lists with tunnels, transit, etc
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS c024905d56
Merge pull request #1542 from nonlinear-chaos-order-etc-etal/openssl
Android.mk : openssl-1.1.1d-clang instead of openssl-1.1.1a-clang
4 years ago
user 6f17624742 Android.mk : openssl-1.1.1d-clang instead of openssl-1.1.1a-clang 4 years ago
orignal 6f2e6ed887 key for next send ratchet 4 years ago
orignal 5f1e66d64b use pre-calculated x25519 ephemeral keys for ratchets 4 years ago
orignal 1f31fdc257 pre-calculate ephemeral keys for x25519 4 years ago
orignal df9965e129 use unordered_map for peers 4 years ago
orignal 61e9c31f0d don't hold RouterInfo after successive connect 4 years ago
orignal a0b35ebd3e mark NTCP2 unreachable routers 4 years ago
orignal 951ec567c7 don't try to connect though teminated local destination 4 years ago
orignal 31494267e5 fixed datagram idle crash 4 years ago
orignal 70e4cbc023 differentiate UDP server sessions by port 4 years ago
R4SAS 8d903a09e2
[Docker] drop boost-python2 4 years ago
R4SAS 63451fb781
Merge pull request #1535 from komachi/apparmor-fixes
Improve AppArmor profile
4 years ago
orignal 1e609acb03 keep sending through first successive routing path 4 years ago
orignal 69194118df generate random padding length in bulk 4 years ago
Anton Nesterov 0f309377ec Improve AppArmor profile
- give it a name
- import needed abstractions
- allow local additions
- cleanup
4 years ago
orignal 49a19a52c8 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal 1a39f7e5c6 GarlicRoutingPath per session 4 years ago
R4SAS a5fed64f38
[webconsole] update sliders html and css
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 79858d4372
[webconsole] adaptive styling
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 61897ae16c crypto.ratchet.inboundTags 4 years ago
orignal 5e0a8ed232 set UDP receive buffer size 4 years ago
orignal 5993cc857a start new tunnel message if remining is too small 4 years ago
orignal 6a0174293e send raw datagrams in opposite direction 4 years ago
orignal 44bb8f6f16 allocated datagram I2NP from memory pool 4 years ago
orignal a33cad4b70 eliminate datagram send timer 4 years ago
R4SAS 0639cce784
[SAM] fix ECDSA signatures names
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal a8f227f759 send raw follow-on datagrams 4 years ago
orignal f077836bf5 store DatagramSession for bulk 4 years ago
orignal 6d7847f2df send bulk datagrams 4 years ago
orignal 221c14cf0e don't lookup UDP session if port was not changed 4 years ago
orignal 6735b2686b set LeaseSet2 for ECIESx25519 4 years ago
orignal 55ff6beb7d don't create ECIESx25519 again if key was not changed 4 years ago
orignal 4ae41513ac save new session with NSR tagset 4 years ago
orignal 438a225487 pass calculatePublic 4 years ago
orignal e135696530 support multiple encryption keys through the I2CP 4 years ago
R4SAS 9135772f89
2.32.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 0dc212d97c fixed non-updating LeaseSet1 4 years ago
R4SAS 45e8d5c50e
Return deprecated websocket config options for compatibility
Closes #1523

Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 37ec90c436 don't gererate more tags for detached session 4 years ago
orignal 010541197c Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 4 years ago
orignal bdb918cdb3 honour explicitPeer param in tunnels 4 years ago
R4SAS 64c986ebbb
[RPM] update spec files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS a4c4bf4b58
[RPM] update spec files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 60b1b2ca4a
[RPM] update spec files
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 8e0f1de25a
2.32.0 - [RPM] fix build in fedora copr
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS dba6d68108
update debian patch
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS d226834eef
update debian patch
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
r4sas 2facf14443
fix symbolic link
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 years ago
r4sas 6bd44f0e4b
2.32.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 years ago
r4sas 1dcb878796 update debian and rpm stuff to 2.32.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 years ago
orignal 0e0169d22b 2.32.0 4 years ago
R4SAS 50c8a84037
[SOCKS] overwrite connection info after establishing connection to i2p host (closes #1336)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 1975adc48f print remote peer for queues 4 years ago
orignal 71564f0d10 set default i2cp.leaseSetEncType=0,4 for http and socks proxy for android 4 years ago
orignal 5a32082624 recreate session after 90 seconds incativity 4 years ago
R4SAS 45aa78d953
revert 7133a07 - it broke usage in some SOCKS implementations
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 86e8614934 allow session restart after 2 minutes from creation 4 years ago
orignal ead89c767a compress longer RouterInfo 4 years ago
R4SAS 8bae4975fb add copyright headers
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 7a5146ea74 fix code syle(spaces->tabs, tabulations)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 9633c247f0
[readme] update docker badges 4 years ago
R4SAS 78640532e1
[appveyor] add build fix (#1520)
Add fix due to msys2/MSYS2-packages#1967
4 years ago
orignal 46ee427ee3 common header for repliable datagrams 4 years ago
orignal 0c2b0081b5 rollback 4 years ago
orignal f133a7f9fd resend outstading packets again 4 years ago
orignal a6c9ee446a LeaseSet and encryption type for http and socks proxy 4 years ago
orignal 153aaa6d21 no compression for RouterInfo gzip 4 years ago
orignal e5901dad91 resend not more than half of window 4 years ago
R4SAS 9318388007
[apparmor] add one more resolv.conf path (reported by user with ubuntu 18.04)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal bdd75e1171 build client tunnels through router with version >= 0.9.36 4 years ago
R4SAS 7d22ddd710
Merge pull request #1453 from donarrock/patch-1
Update Dockerfile
4 years ago
R4SAS 7e82c8e279
Merge pull request #1394 from zetok/service 4 years ago
R4SAS db6a0e6ad9
[cmake] remove windows build support (#1517)
Removes support for MSVC, MSYS, MinGW and included NSIS installer in cmake
4 years ago
orignal 648d035a0f GzipNoCompression for datagrams 4 years ago
orignal 7ebf2f010c shorter padding for optimal packet length 4 years ago
orignal 3db4421aa7 don't invoke gzip for decompression if no compression 4 years ago
orignal 9fb59e128b resubmit updated LeaseSet if not confirmed 4 years ago
orignal c7c6e5917a Streaming MTU size 1812 for ECIESX25519AEADRatchet 4 years ago
orignal 7b418b3adf insert whole message to queue 4 years ago
orignal 1c8d662e30 don't add padding for optimal packet size 4 years ago
orignal d4bfeab36c pass gzip parameter to UDP tunnels 4 years ago
orignal e1b1032df9 reseeds update 4 years ago
orignal 329439d0ae don't copy datagram payload 4 years ago
orignal 0b1cfb2102 send response to recived datagram from ECIESX25519AEADRatchet session 4 years ago
orignal 1e4d2fd053 fixed for g++10 4 years ago
R4SAS 716378bd6b [makefile] fix build with g++ 10
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS de48d3aaec
Merge pull request #1515 from BOPOHA/logrotate_config
added logrotate config
4 years ago
R4SAS b5b195e628
[windows] fix msys build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 23be4c01df CreateLeaseSetClove 4 years ago
orignal 86782f3479 eliminate extra buffer allocation for incoming packets 4 years ago
orignal a96c205830 allow encryption type param for encrypted LeaseSet 4 years ago
Anatolii Vorona 9274881c18 update logrotate config for reusing in debian 4 years ago
Anatolii Vorona 24c5f07153 added logrotate config 4 years ago
orignal 789ff702ac fixed sudden webconsole hangs 4 years ago
orignal 9b6facf3b0 fixed crash of encrypted leaseset without authentication 4 years ago
orignal d503190647 fixed crash of encrypted leaseset without authentication 4 years ago
orignal c4d9c03930 handle termination block 4 years ago
orignal d7d70b707f configurable throw function 4 years ago
orignal dbe1e3f577 ThrowFatal function 4 years ago
orignal bb7f03857c ThrowFatal function 4 years ago
orignal 53b43353eb fixed formatting 4 years ago
orignal b197556447 remove dependency from Win32App 4 years ago
R4SAS 42d4781a96
[windows] add binding exceptions messagebox notifications, update exceptions handling code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS d991cc3b96
[services] handle binding errors in tunnels, webconsole
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 4d48d35ad7
[SSU] handle socket binding errors
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal b7ba8f8e93 precalculate initial h and ck 4 years ago
orignal dff510c181 set best compression for RouterInfo 4 years ago
orignal 1eead0e885 GzipNoCompression witout zlib calls 4 years ago
orignal e301387896 don't calculate checsum for Data message send through ECIESX25519AEADRatchet session 4 years ago
orignal c49e544781 allow longer families 4 years ago
orignal d48db501e0 max payload is always 1730 4 years ago
orignal ec4e17f75c cleanup previous tagsets 4 years ago
orignal 17e69e67b1 create additional tags for NSR tagset 4 years ago
orignal c4f9f7da06 fixed warning 4 years ago
R4SAS c367476036
[webconsole] fix printing information about ECIESx25519 tags/sessions
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS f5712c4198
remove not needed initialization for pointer
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 1aa0da3382 [NTCP2] fix socks proxy support
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 27d69894d4 show ECIESx25519 session and tag on the web console 4 years ago
R4SAS 7133a07f38
[SOCKS] wrap DNS type requests response as IPv4 (fixes netcat usage, closes #1336)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 627d8cfe69 correct timestamp check for LeaseSet2 4 years ago
R4SAS 16b992d705
update info about pidfile defaults (closes #1136)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 3d9c844dca handle out of order NSR 4 years ago
R4SAS c0de9455bb [android] stop immediatly if no transit tunnels available while graceful shutdown
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 65e1871cd7 new tag for each NSR 4 years ago
R4SAS 0a431594f8
[Log] Change default loglevel (closes #1230)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 7b22ef4270 create incoming NSR tagset 4 years ago
orignal f77a58b2dc set some ECIESx25519 params 4 years ago
orignal 142a138cfc store previous reverse key 4 years ago
R4SAS e6fdf5ad8d
[Log] create logfile even if loglevel is "none"
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 5700e18257
[FS] read tunnels configs which ends with .conf only
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 50a77fedca removed trivial check 4 years ago
orignal 51e3d5f7bc create next tagset 4 years ago
R4SAS 7f859978dd
[webconsole] Add runtime transit limit changer, fix button CSS
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal d8134e8a21 handle and send next key message without public key 4 years ago
orignal 614d91e0b1 send same next key reponse 4 years ago
orignal 30067fc7d7 handle next key forward 4 years ago
orignal ec29597dbd associate tagset for ECIESx25519 tags 4 years ago
orignal ad211a63f3 check if number of peers to exclude doesn't exceed 512 4 years ago
orignal 6b596bd05f check ECIES flag for encrypted response 4 years ago
orignal 510b85fd23 try ECIESx25519 tag first 4 years ago
orignal e3c8f3fd6f use ack request instead DeliveryStatus for LeaseSet confirmation 4 years ago
orignal f9175db28e store intermediate symmetric keys 4 years ago
orignal f4798d05e7 persist multi encryption keys 4 years ago
orignal a2a0f62135 multi crypto keys in i2cp.leaseSetEncType 4 years ago
orignal d923f0e01b support two encryption keys 4 years ago
orignal 2fc16ee13d indetification of incoming garlic messages 4 years ago
R4SAS 152e579f7e
[windows] update flag on connectivity state changes, CRLF > LF
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 90914bb2de
[windows] init internet connectivity events checker functional (vista+ supported only)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 95fa835191
[android] update strings, menus, add reloading tunnels item
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 4e37df26a3
2.31.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 5e606573b1 2.31.0 4 years ago
r4sas b3974cb52a
[webconsole] security hardening headers (closes #1464)
Signed-off-by: r4sas <r4sas@i2pmail.org>
4 years ago
orignal b7c206c44b replace by new incoming session 4 years ago
orignal 49c1e47736 correct termination if session already exists 4 years ago
orignal 4e1319d874 handle ECIESFlag in DatabaseLookup at floodfill 4 years ago
R4SAS a9436aa9af drop i2lua
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS d503f07564 suppress GCC 7 (bug 77728) psabi note
Suppresses messages like that:
    note: parameter passing for argument of type <...> will change in GCC 7.1

Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal aa7750bfd3 keep sending new session reply until first established session message received 4 years ago
orignal 8872d1f389 mutex for m_RemoteIdentity 4 years ago
orignal f21af4068f preferred crypto type for Decrypt 4 years ago
orignal f4ca6bbb52 fixed race with identity verifier 4 years ago
orignal 869d0156ce handle Ack request 4 years ago
orignal 744e893dce check message length 4 years ago
orignal fe9ac10f02 generate new tags based on last received index 4 years ago
orignal 6fb80f226a reopen socked and restart receiver on exception 4 years ago
orignal ff19bab800 set only key correctly 4 years ago
orignal 962c2160c7 set actual LeaseSet2 buffer size 4 years ago
R4SAS 168da33d8b
add comma
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS b6b25dc9f3 update log messages
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 3ca17fdc03 support multiple encryption keys 4 years ago
R4SAS 2249708097
[webconsole] remove excess tag
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 2fcaa7d260
[webconsole] rework spoilers; print tags, leases, router info in table
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal f3b0e57a54 publish multiple encryption keys 4 years ago
orignal 5da92437a1 set msg type for deliverystatus 4 years ago
orignal b5bc05ac2b delete unconfirmed LeaseSet and DeliveryStatus 4 years ago
orignal 45145fa50a add ECIESX25519AEADRatchet session to delivery status 4 years ago
R4SAS dd8200e8b0
cleanup websocks
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 2f56547d5f
Merge pull request #1477 from PurpleI2P/drop-websockets
drop websockets support
4 years ago
orignal 82bdcfbbcb
Merge pull request #1491 from nonlinear-chaos-order-etc-etal/openssl
qt: delayed save in background. should be better ui experience
4 years ago
user 0e38e43315 some qt work. fixed on slow computers; now faster as delayed save is implemented 4 years ago
user 63746be4d5 resolve i2pd_qt.pro conflict 4 years ago
user ee73ee365f some work on qt 4 years ago
orignal 3c53479864 update LeaseSet for ECIESX25519AEADRatchet sessions 4 years ago
orignal 4adc741de3 send DeliveryStatusMsg for LeaseSet 4 years ago
orignal 64da62dbe6 alsways store latest symmkey 4 years ago
orignal dd9b5faa5c fixed crash on termination 4 years ago
R4SAS 51d018acc6
webconsole: add stream closing
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 5eec580727 delete strem from destination upon termination 4 years ago
orignal 1e9a53da3f delete stream by id for HTTP interface 4 years ago
R4SAS 8dae044600
Merge pull request #1441 from noraj/patch-1
README: explicit linux distro supported
4 years ago
orignal 2d3fad2cdb correct proxy buffers 4 years ago
orignal a59a8f62ca
Merge pull request #1479 from wipedlifepotato/openssl
Pre init webview button. (android)
4 years ago
potatowipedlifereverse 35cfa7d9fb Merge branch 'openssl' of github.com:wipedlifepotato/i2pd into openssl 4 years ago
potatowipedlifereverse c6ccb373a2 del geti2pdpath 4 years ago
wipedlifepotato b6368170ed
Update README.md 4 years ago
potatowipedlifereverse 35e8424293 preinit webview+configparser+README.md
tabulation fixes

configparser to comments

dont need

pre init webview

readme changes

delete submodules

webview in main menu

webview pre init

delete modules

delete submodules
4 years ago
orignal e969d58689 handle ntcp2.proxy parameter 4 years ago
orignal ae20e3aa95 NTCP2 proxy 4 years ago
orignal de4cb74173
Merge pull request #1478 from unlnown542a/openssl
add ntcp2proxy support
4 years ago
unlnown542a 4f0da87a7a add ntcp2proxy support 4 years ago
r4sas 97f0347715 Update android stuff:
* switch to c++17
* use boost 1.72.0
* disable minify in release
* enable apk splitting (separate apk for every ABI)
* add version to output apk name

Signed-off-by: r4sas <r4sas@i2pmail.org>
4 years ago
orignal 2ffe62ba41 [[fallthrough]] if C++17 only 4 years ago
R4SAS fe1724e7e6
switch travis-ci to xenial 4 years ago
R4SAS 2ac2da41cf
cmake: fix else statement 4 years ago
R4SAS ed574f9d79
use C++17 if available when configuring with cmake 4 years ago
orignal e0cb26bd9e fixed fallthough warning for C++17 4 years ago
orignal 1893127e84 use fold expression if C++17 4 years ago
orignal b02c9fb118 enable C++17 for gcc 4 years ago
R4SAS bca0809918
cleanup removed websockets funtions
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 00db527377
drop websockets support
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
R4SAS 2c6e041ae2
rpm: make package buildable on mageia cauldron (#1476) 4 years ago
R4SAS a0d6c654cc
2.30.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
4 years ago
orignal 5115c27e72 2.30.0 4 years ago
R4SAS d09c3ccb2d
Merge pull request #1474 from rex4539/dead-strip
Pass -dead_strip -dead_strip_dylibs -bind_at_load on macOS
4 years ago
Dimitris Apostolou 5c308026ac
Pass -dead_strip -dead_strip_dylibs -bind_at_load on macOS 4 years ago
orignal 91919c6d64 check if both sides are ECIESx25519 4 years ago
orignal 7168738835 check ctx for null 4 years ago
orignal 9c9b723cf5 delete expired ECIESX25519AEADRatchet sessions and tags 4 years ago
orignal 50450923df don't add extra , to result string 4 years ago
orignal f392edd66c single thread SAM by default 4 years ago
orignal 24b48e5d50 reseeds update 4 years ago
orignal 47f384a0e0 postpone SAM destination termination 4 years ago
orignal 88594887f9 fixed qt build 4 years ago
orignal 32e2f0b1fa correct termination of streaming destination 4 years ago
orignal 09ed57ad42 select preferred crypto from LeaseSet2 4 years ago
orignal 53a6162b0c generate more receive tags when needed 4 years ago
orignal 694d851cdb Symmetric Key Ratchet 4 years ago
orignal 8e53c30a00 correct calls sequence for tag and index 4 years ago
orignal 63e807b0b4 fixed crash on stop 4 years ago
orignal 012f22cc47 create session tags for ECIESX25519 4 years ago
orignal 9d891ab5dd single thread mode for SAM 4 years ago
orignal d0e78be867 moved io_service away from ClientDestination 4 years ago
orignal cbedebc9dd change minimal MTU size 4 years ago
orignal 969f9aa436 common RuunableBase with private inheritance 4 years ago
orignal b982be5ff5 handle existing session message 4 years ago
orignal 2d154ee640 move RunnableService away from LeaseSetDestination 4 years ago
orignal 49810eb153 common RunnableService 4 years ago
orignal 85b88b8749 second x25519 for new session reply 4 years ago
orignal 239c8b5172 destination delivery instructions 4 years ago
orignal 8c800dc178 save aepk from new session message 4 years ago
orignal cdd068d99a correct message size 4 years ago
orignal 48fa10b080 incoming ECIESX25519AEADRatchet messages hanler 4 years ago
orignal a1dbec0fcb handle new session reply 4 years ago
orignal abe668f1c3 fixed build error 4 years ago
orignal 77440c235d replaced map by unordered_map 4 years ago
orignal fd1ee48dbe datetime and padding blocks 4 years ago
orignal 205e807b66 reset keys 4 years ago
orignal 34295adb05 attach LeaseSet clove 4 years ago
orignal 7c212bef63 add new session to the list after reply received 4 years ago
orignal 76f95644b7 fixed #1461. Use openssl's HKDF for 1.1.1 anf higher 4 years ago
orignal 928b90d5bc fixed #1461. Use openssl's HKDF for 1.1.1 anf higher 4 years ago
orignal 09c6c2a4f3 decode aepk and bepk back 5 years ago
orignal 2b2bd733e9 correct sharedkey for new outgoing session 5 years ago
orignal 0d2d7e5e71 fixed Elligator tests 5 years ago
orignal 6142e93252 session tag for ECIESx25519 sessions 5 years ago
orignal ccec3376ba try another ephemeral keys if elligator encoding failes 5 years ago
orignal f497a74ec4 set random two highest bits 5 years ago
orignal 0e666e7d6a encoding fail test 5 years ago
orignal f498fabd27 fix for openssl 1.1 5 years ago
orignal 8b49a55442 ratchet tagsets 5 years ago
orignal a26eb942a9
Merge pull request #1458 from neheb/jjjjj
replace random_shuffle with shuffle
5 years ago
Rosen Penev eabcafa516
replace random_shuffle with shuffle
random_shuffle is gone with C++17.

Found and fixed with clang-tidy.
5 years ago
orignal 6cc388c1bc use HKDF for MixKey 5 years ago
orignal 62e39ddfbd new session reply 5 years ago
orignal 80373623cd create payload 5 years ago
orignal 451c3945f0 create new ECIESX25519AEADRatchet session if not found 5 years ago
orignal 00cb15d9b4 fixed tyypo 5 years ago
orignal 67dd59125e new outgoing ECIESX25519AEADRatchet session 5 years ago
orignal b6800dd125 lookup ECIESX25519AEADRatchet session by static key 5 years ago
orignal dc9da69509 derive ECIESX25519AEADRatchetSession from GarlicRoutingSession 5 years ago
orignal d7d964bf57 GarlicRoutingSession/ElGamalAESSession split 5 years ago
orignal bcfe44db54 handle tunnel delivery instructioin for ECIESx25519 5 years ago
orignal 376bf6ba72 correct message size for ECIESx25519 5 years ago
orignal f651baab25 ECIESX25519AEADRatchetSession added 5 years ago
orignal 61752e2aab correct ciphertext length 5 years ago
orignal b7d3fd959e
Merge pull request #1454 from rex4539/dead-strip
Pass -dead_strip -dead_strip_dylibs -bind_at_load on macOS
5 years ago
Dimitris Apostolou 7ac05f8487
Pass -dead_strip -dead_strip_dylibs -bind_at_load on macOS 5 years ago
donarrock 5cfc574f9a
Update Dockerfile
Fixes dependencies, re-adds `boost-python` as `boost-python2` which was removed in #1408 .
5 years ago
orignal 4f70822b13 always persist crypto keys for public destinations 5 years ago
orignal 0007f304d0 don't pass from to HandleI2NPMessage 5 years ago
orignal 4afef91359 invoke HandleCloveI2NPMessage 5 years ago
orignal 815b6db0bf HandleCloveI2NPMessage 5 years ago
orignal 433d3bf582 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 5 years ago
orignal a335841509 pass msgID to HandleDeliveryStatus 5 years ago
r4sas 26ad793d82
use unscoped storage (fixes usage on android 10)
Signed-off-by: r4sas <r4sas@i2pmail.org>
5 years ago
orignal 5337aa10f7 check AES tag first 5 years ago
orignal 9f79bdae9b encryptor for ECIES-X25519-AEAD-Ratchet 5 years ago
orignal db84be2488 use HKDF for NTCP2 key derivation data phase 5 years ago
orignal 599ec62bb0 use HKDF for NTCP2 key derivation data phase 5 years ago
orignal 19a88300c6 decrypt payload section 5 years ago
orignal b5d55e1ffb decrypt flags/static section 5 years ago
orignal 521fb83e38 initial code for ECIES-X25519-AEAD-Ratchet KDF 5 years ago
orignal 553d59c32b decryptor for ECIES-X25519-AEAD-Ratchet 5 years ago
orignal 9ed58e5186 encode with highY 5 years ago
orignal 36eaaa748c handle case when encoded key is (p-1)/2 5 years ago
orignal 4d7b86ca26 elligator test added 5 years ago
orignal 5faf84c732 correct conversion from Little Endian 5 years ago
orignal d7b819267f check a for 0 in Legendre 5 years ago
orignal 7417867d0f implemented Legendre 5 years ago
orignal 8d74905257 0.9.44 5 years ago
orignal c38298c06e Elligator decode 5 years ago
orignal 3100d587d1 use d%q 5 years ago
orignal ba849d0300 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 5 years ago
orignal 95df3e4b39 encode key 5 years ago
R4SAS 72492e33a0
appveyor: drop msys2 overwrite 5 years ago
R4SAS 934f1269f5
appveyor: replace deprecated --force in msys2 5 years ago
orignal e6956d9bb0 calculate constants 5 years ago
orignal 2877900233 use 486662 for A 5 years ago
orignal df1aa52e08 Elligator's encode 5 years ago
orignal 5fa2485a7d removed reseed.i2p.net.in 5 years ago
orignal 29f0e10411 Elligator added 5 years ago
orignal 39300a5bbf removed reseed.i2p.net.in 5 years ago
Alexandre ZANNI 35d6268675
README: explicit linux distro supported
close #1440
5 years ago
orignal 0abb871f3f close socket after if accept failed 5 years ago
orignal 704fca969f handle accept errors 5 years ago
R4SAS 95debf8c80
update mingw build script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
5 years ago
R4SAS dd94b77b2a use GetTickCount dll pointer, add USE_WINXP to makefile
Signed-off-by: R4SAS <r4sas@i2pmail.org>
5 years ago
orignal 6cfe4fa580 handle sending errors 5 years ago
orignal 515c086099 Use GetProcAddress for inet_pton. Fixed build error 5 years ago
orignal 34ce06ac17 some cleanup 5 years ago
orignal a104c9881e some cleanup 5 years ago
orignal c3e3c091cc correct implementation of GetMTUWindows for WindowsXP 5 years ago
orignal 651240113c mark RI as unreachable if all connections failed 5 years ago
orignal 77189bf8e9 start over if an active session got disconnected 5 years ago
orignal 60fd3a4542 fixed #1434 use memset inster bzero 5 years ago
orignal c66f9c8d6d reset connection attempts before reconnect 5 years ago
orignal 569088eaca 2.29.0 5 years ago
orignal a7e8dd04fe 2.29.0 5 years ago
orignal dfdd76a1bb fixed #1429. Don't use monotonic timer for Win32 5 years ago
R4SAS 28aac6f93b
fix bogus date in changelogs
Signed-off-by: R4SAS <r4sas@i2pmail.org>
5 years ago
orignal c2f47119ce fixed #1424. Check if .b32.i2p address string is valid 5 years ago
orignal d6b1d0d4fb remove incoming session from pending list when established 5 years ago
orignal 03a861745b removed CloseSession 5 years ago
orignal 9a7aed20e9 handle error for SessionConfrimed send 5 years ago
orignal b7f17d4cb1 client auth flag for B33 address 5 years ago
orignal 2497c3d187
Merge pull request #1421 from nonlinear-chaos-order-etc/openssl
Fixes three upnp issues, probably including: probably fixed #1419
5 years ago
kote f7a084969a fixed #1387 5 years ago
kote 2900bc26a5 fixed #1388 : took code from 736c95a870 and fixed it as https://github.com/PurpleI2P/i2pd/issues/1388#issuecomment-528495918 tells 5 years ago
orignal 2334c56a96
Merge pull request #1414 from nonlinear-chaos-order-etc/openssl
qt: fixed logging to window in release builds
5 years ago
orignal 90a5d02bf6 2.28.0 5 years ago
kote 81d9626da9 qt: fixed logging to window in release builds 5 years ago
orignal 44a2549b81 2.28.0 5 years ago
orignal a2b8d468bc
Merge pull request #1412 from nonlinear-chaos-order-etc/openssl
qt: disabled broken UPnP + small qt debugging tweaks
5 years ago
kote d523f0cadd gitignored autosave files by qtcreator 5 years ago
kote 99116ff097 qt: disabled upnp for now - until upnp fixed 5 years ago
kote 3939ca9eb4 enabled default logging debug option for qt debug builds 5 years ago
kote b5aa67b491 tweaked debug logging in i2pd_qt 5 years ago
orignal e42efec220 correct outet plain text length in case of authKeys 5 years ago
orignal 9d06aa2f6a pass authSalt or epk 5 years ago
orignal 80765a797b correct outer cipher text len 5 years ago
orignal 0b5509a1ed correct authClients offset 5 years ago
orignal 478d7b4a83
Merge pull request #1410 from nonlinear-chaos-order-etc/openssl
android various fixes and improvements
5 years ago
kote 9d3b38141a android various fixes and improv 5 years ago
orignal ab3a4d902e
Merge pull request #1409 from nonlinear-chaos-order-etc/openssl
android - show battery optimiz. os dialog menu item added; translated all battery stuff into Russian
5 years ago
kote 5eab5f2437 show battery optimiz. menu item now hidden if not supported by os 5 years ago
kote 80f632c19a show battery optimiz. menu item added; translated all battery stuff into Russian 5 years ago
kote 6e4f18543d added *.local to android/.gitignore 5 years ago
l-n-s 54586c9076
Merge pull request #1408 from docker-and-co/fix-dockerfile-non-existend-deps
fix dockerfile: remove unmet dependencies
5 years ago
orignal 351c899807 cleanup incoming streams on stop 5 years ago
Grigory Kotov fe45d431d7
fix dockerfile: remove unmet dependencies 5 years ago
orignal 488c2f6d05 bump SDK version 5 years ago
orignal 75ab0909b3
Merge pull request #1405 from nonlinear-chaos-order-etc/openssl
various Android stuff. Fixed #1400
5 years ago
kote 8f82d563c1 various Android stuff. Fixed #1400 5 years ago
orignal 9bbce5dba6 fixed typo 5 years ago
R4SAS 099adab9ed
Update README.md
update head badges links, add snapcraft badge
5 years ago
orignal c8cbf425ac check and send netid for NTCP2 and SSU 5 years ago
orignal ad9c11cd92 correct parsing of addreses containing # 5 years ago
orignal 3872c2a3f5 use published encrypted instead orig type 5 years ago
orignal e6a09b49c9 published encrypted flag 5 years ago
orignal db107602bd handle messages with \r\n 5 years ago
orignal a6558a61a7 Recognize RedDSA_SHA512_Ed25519 signature type 5 years ago
orignal 254d2b82b3 fixed #1393. store streams by recvStreamID 5 years ago
Zetok Zalbavar 2c9fa2f738
Fix and update i2pd.service
- /var/run on distros with systemd is a symlink to /run , hence the
path changes.

- Remove unnecessary runtime dependency on `/bin/kill` which is
provided by `procps` and might not be available on minimal installs
(e.g. containers). Instead use `/bin/sh` which has a built-in `kill`.

- `PrivateDevices=yes` causes i2pd to fail to start on latest Debian
unstable. Service exits with the following:

```
i2pd.service: Failed to execute command: Operation not permitted
i2pd.service: Failed at step EXEC spawning /usr/sbin/i2pd: Operation not permitted
i2pd.service: Control process exited, code=exited, status=203/EXEC
i2pd.service: Failed with result 'exit-code'.
Failed to start I2P Router written in C++.
```

According to `man systemd.exec` exit code 203 corresponds to the
`execve(2)` system call failing. So it looks like i2pd tries to do
something it shouldn't be doing. The proper fix would be in i2pd, but
who knows how long that would actually take, so to allow people to
actually launch i2pd in meanwhile the line has been removed from the
service file.

Also, surprisingly, right after installing i2pd it started without any
problems, and only after restarting the box i2pd started to fail for no
apparent reason.
5 years ago
orignal 97d9795fc9 pass encrepted LeaseSet auth keys 5 years ago
orignal 54071b0e5d set and handle unpublished LeaseSet flag 5 years ago
orignal 925e8316c7 read i2cp.leaseSetAuthType, i2cp.leaseSetClient.dh.nnn and i2cp.leaseSetClient.psk.nnn from tunnel config 5 years ago
orignal 99e1b74023 create encrypted LeaseSet2 with authentication 5 years ago
orignal 7d68ccca53 create encrypted LeaseSet2 with authentication 5 years ago
orignal a090114066 send data message wih raw type fpr raw datagrams 5 years ago
orignal a204841abb handle RAW SEND 5 years ago
orignal cc451809cc send/receive raw datagrams through the SAM 5 years ago
orignal a605e4bab6 send and recieve raw datagrams 5 years ago
orignal 3f0534134d check for malformed b33 5 years ago
orignal 3acfb129cd 2.27.0 5 years ago
orignal 6ccef66920 call shutdown before close 5 years ago
orignal e9fa4e94a6
Merge pull request #1374 from rszibele/openssl
BOB: fix status command.
5 years ago
orignal fecc0c4640 don't call destructor twice 5 years ago
rszibele b759294975 BOB: fix status command. 5 years ago
rszibele a23e845c03 BOB: improve comment and remove error log in list command 5 years ago
rszibele cb8373e487 BOB: status response now correctly starts with "OK DATA". 5 years ago
orignal 8e919ddc8e use monotonic clock for uptime 5 years ago
orignal 832a9ab6b5 don't set random NTCP2 port if already set 5 years ago
orignal 13732ac333 fix #1363 try connect in SSU's thread 5 years ago
orignal 3e932a55f4 fixed typo 5 years ago
orignal 74e8610ec9 DH auth for encrypted LeaseSet2 5 years ago
orignal 089a60ded6
Merge pull request #1367 from rszibele/openssl
fix build on BSDs, as "isset" is a defined macro.
5 years ago
rszibele c8eeefe194 fix build on BSDs, as "isset" is a defined macro. 5 years ago
orignal 85eeba14c1 Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 5 years ago
orignal f6f45eab39 flood encrypted LeaseSet2 with store hash 5 years ago
R4SAS a74065f775 [qt] dont build UnixDaemon.cpp 5 years ago
R4SAS 48d02f7e09 [qt] update headers, fix ChaCha source name, remove duplicates 5 years ago
R4SAS e60549f8df [qt] fix build 5 years ago
orignal 41f4f4713e handle i2cp.leaseSetPrivKey 5 years ago
orignal 213a292fd5 correct offsets for auth data 5 years ago
R4SAS 79630e844b
2.26.0 5 years ago
orignal 1c9e46dbb3 2.26.0 5 years ago
orignal 0a299284f8 correct check for PSK auth 5 years ago
orignal 347a5f7346 pass secret to encrypted LeaseSet2 5 years ago
R4SAS c6a903572c [HTTP] add PROFIND support 5 years ago
orignal 14f0d6d26b extract client auth data 5 years ago
orignal 485f105555 fixed typo 5 years ago
orignal 686c0b776f common blinding code for public and private keys 5 years ago
orignal 828862ea49 store hash for ECDSA blidning 5 years ago
orignal c4dffa4dc8 remove obsolete reseeds 5 years ago
orignal 3c1906e3d4
Merge pull request #1360 from khumarahn/openssl
link libi2pd to boost and zlib
5 years ago
Alexey Korepanov 7147a3694c link libi2pd to boost and zlib 5 years ago
orignal 64707dbb22 key blinding test 5 years ago
R4SAS 554e8eeef3
[appveyor] remove gcc-ada and gcc-objc packages
https://github.com/msys2/MINGW-packages/issues/5434#issuecomment-496706950
5 years ago
orignal 5e10549543 disable NTCP by default 5 years ago
orignal 685f45bd76 publish/unpublish NTCP2 address depending on network status 5 years ago
orignal 61d84dd4c1 publish/unpublish NTCP2 address depending on network status 5 years ago
orignal 4d10593bb1 publish/unpublish NTCP2 address depending on network status 5 years ago
orignal fbb8903774 correct buffer size for ECDSA blinding 5 years ago
orignal e8cac91bb7 blind ECDSA public key 5 years ago
orignal 7328ffa036
Merge pull request #1359 from rszibele/openssl
BOB modifications.
5 years ago
rszibele a03e828317 BOB: status: forgot to pass destination for current tunnel. 5 years ago
rszibele 93d4dc70cf BOB fixes. 5 years ago
orignal 8e3d16e9fb update ipv6 addresses from SSU rather than NTCP or NTCP2 5 years ago
orignal 07405e57b9 fixed typo 5 years ago
orignal 354c9187db detect our ipv6 address 5 years ago
orignal af33df3004 common buffer size 5 years ago
orignal 78bfde237f allocate actual RouterInfo's buffer size 5 years ago
orignal 7b9033d678 allocate actual RouterInfo's buffer size 5 years ago
orignal f784cfad46 correct RouterInfo buffer size 5 years ago
orignal e40c139ff1 blind ECDSA private key 5 years ago
orignal edf4f7695d fix #1352. correct response for 'list' command 5 years ago
orignal 60ec03237e blidning for ECDSA 5 years ago
R4SAS a91641e427 fix #823, reindent code 5 years ago
orignal 5c3992018f fixed #1350 use GetAddress insted GetIdentHash 5 years ago
R4SAS f5b682619f
[webconsole] move b33 to spoiler, fix typo 5 years ago
orignal 743fa745b7 show b33 address for encrypted LeaseSet2 5 years ago
orignal 39400fd381 move key blinding code from LeaseSet.cpp to Blinding.cpp 5 years ago
orignal 5299ac35a6 create NTCP2 ipv6 address 5 years ago
orignal ef76ed394c publish SSU ipv6 address if NTCP if disabled 5 years ago
orignal 1472637de7 skip introducers for non-SSU address 5 years ago
orignal 3b8baa85a3 2.25.0 5 years ago
R4SAS 73921b1024 fix ipv6 fallback address 5 years ago
R4SAS ece140f18c [httpproxy] make addresshelper support configurable for every httpproxy 5 years ago
orignal 5e42947fbd always lookup SSU session if peer's endpoint doesn't match 5 years ago
orignal 1bfb9b02f5 make sure remote endpoint matches stored with 5 years ago
r4sas 16a14c2b76 [android] set datadir path from system environment 5 years ago
orignal f6199c6c17 print store hash for encrypted LeaseSet 5 years ago
orignal d7e7f06e88 re-request encrypted LeaseSet 5 years ago
orignal 4c4e856a1a ntcp2.addressv6 parameter 5 years ago
orignal 07bbbbaf61 fixed gcc 4.7 build 5 years ago
orignal 3236827781 add/removed NTCP addresses 5 years ago
orignal 0be664cc3d publish NTCP2 address instead NTCP if NTCP is disabled 5 years ago
orignal 6cc6849ccc use published timestamp for blinding 5 years ago
orignal 5d5cd71714 limit expiration by next midnight for encrypted LS2 5 years ago
orignal d248343517 Handle CreateLeaseSet2 I2CP message for encrypted leasesets 5 years ago
orignal 64d800427f allow HTTP headers without value 5 years ago
orignal c4c896a833 publish encrypted LS2 5 years ago
orignal b6b5bb3f75 publish LeaseSet with store hash 5 years ago
orignal 5d69bb7383 correct ecrypted LS2 layout 5 years ago
orignal 76e222079a Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 5 years ago
orignal 73abb9278d correct ecrypted LS2 size 5 years ago
orignal 8fd843e7ce
Merge pull request #1334 from rex4539/fix-typos
Fix typos
5 years ago
Dimitris Apostolou 6a497a23d9
Fix typos 5 years ago
orignal 3ac74e1091 create encrypted LS2 5 years ago
orignal ef0fb48f1f blind private keys 5 years ago
orignal 414ef2bc3d fixed gcc 4.7 build 5 years ago
orignal ea791309ad moved credential and blinding to BlindedPublicKey 5 years ago
orignal 706da6e431 allow .b32.i2p in jump links 5 years ago
R4SAS ed116e7cea
add gcc 9 support 5 years ago
orignal 5b56f4007b counter is always in Little Endian 5 years ago
orignal e2071542bf use 16 bytes iv for chacha20 5 years ago
orignal cdb217b774 always initialize m_Pkey 5 years ago
orignal 079798940b lookup for b33 address 5 years ago
orignal f1c24689bf fixed #1319. send correct response 5 years ago
orignal 1f9cf6ed7c show lookup keys 5 years ago
orignal 43f218410f correct b33 address length threshold 5 years ago
orignal 3fd9d5f641 save b33 addresses 5 years ago
orignal f5ab8f2062 replaced GetIdentHash by GetAddress 5 years ago
orignal 8774a8fbc2 handle b33 addresses in I2P tunnels 5 years ago
orignal 6f4f0f03d2 handle b33 addresses in I2P tunnels 5 years ago
orignal 00b5fdce03 create stream to blinded dest 5 years ago
orignal baee6a0d91 generic address for AdressBook 5 years ago
orignal ff44bcc489 complete implementation of RedDSA 5 years ago
R4SAS c797ac4268
Update README.md 5 years ago
r4sas d22a76d4d1 remove incorrect line 5 years ago
r4sas a6642e0ebc add script for packaging archive with android binaries 5 years ago
orignal 3d4d260a34 extract b33 address 5 years ago
orignal 8e4b9da97d pass blinded key instead identity for encrypted LS2 5 years ago
l-n-s 2be80ba30f
Fix Docker build 5 years ago
R4SAS 2e44c88d6c [2.24.0][android] update addressbook 5 years ago
orignal 21eb1ce6c9 2.24.0 5 years ago
orignal cdfd411df7 2.24.0 5 years ago
R4SAS a6149ca90c [android] upload gradlew script 5 years ago
R4SAS 642435486c [android] add gradle wrapper, update buildtools version, fixes in code. 5 years ago
orignal fc84d6c4b7 remove unused timer 5 years ago
orignal aa4bddd6ec common HKDF 5 years ago
orignal 8ec12a1b65 fixed race condition for publishing 5 years ago
orignal 0fbf552e95 lookup and handle encrypted LeaseSet2 5 years ago
orignal 09b1b120d7 update LeaseSet2 if store type changed 5 years ago
orignal 557244bc3f verify blinding key for encrypted LS2 5 years ago
orignal 24c5ed1cff calculate store hash for encrypted LeaseSet2 5 years ago
orignal 32e55ebd0c blind public key for encrypted LeaseSet2 5 years ago
orignal ea3070d02b derivation of subcredentials for LeaseSet2 5 years ago
orignal 9aaba49a9f decrypt and handle Layer 2 of encrypted LeaseSet 2 5 years ago
orignal 9b64be07a9 set chacha20 counter to 1 5 years ago
r4sas 42c3c28ea7 [addressbook] reset eTags if addressbook can't be loaded 5 years ago
orignal 9e9236badb don't check TRANSIENT destination 5 years ago
orignal 560ebcec8d persist.addressbook parameter added 5 years ago
orignal 9b1fe4338b reuse_address for ipv6 acceptor 5 years ago
orignal 9188e3ad3f ChaCha20 decrypt 5 years ago
orignal af65af5be9 H and HKDF for encrypted LeaseSet2 5 years ago
orignal 2f0115c300 handle RedDSA as EdDSA 5 years ago
orignal 0646461342 check published timestamp for LeaseSet2 5 years ago
orignal ec30ec0996
Merge pull request #1304 from lifecoder-phoenix/openssl
Fix #1257
5 years ago
Life Coder cdecb7a43c Fix #1257 5 years ago
Life Coder aa9c1b66a0 Fix #1257 5 years ago
orignal 846eac29dc filter out unspecified addresses. Check floodfill status change 5 years ago
orignal 0f9e3c5b33 fix crash if public key is null 5 years ago
orignal aa27746982 remove address string 5 years ago
R4SAS d8a4954bf1 [NetDb] check PersistProfiles on load
* tabulation fixes
5 years ago
orignal d40a029dae eliminate extra copy 5 years ago
orignal 96d961c393 correct public key for EdDSA trasient key 5 years ago
orignal 7b6814e32d correct flags 5 years ago
orignal 6fee2d3536 correct options szie 5 years ago
orignal 636fc633d4 send offline signature in streaming 5 years ago
orignal 72a239838e publish offline signature 5 years ago
orignal a463dbc5fb
Merge pull request #1295 from l-n-s/websocket_support
Support websocket connections over HTTP proxy
5 years ago
l-n-s 016ae3b9e9 rewrite for efficiency 5 years ago
R4SAS 7d0d421724 [windows] handle unexpected conditions (#1185) 5 years ago
R4SAS 83b5856a19 fix overflow warning, fix little typos 5 years ago
l-n-s f617b27110 Support websocket connections over HTTP proxy 5 years ago
R4SAS a91a0263cf
update outproxy user-agent header rewrite 5 years ago
orignal 80ffe13f3e correct offline signature layout 5 years ago
orignal 1eb726c9bb create offline keys 5 years ago
orignal 1fa3ba8b42 read offline info 5 years ago
orignal b6bfd66a49 use identity from LeaseSet 5 years ago
R4SAS 1be0e7ddaa [windows] add functional
* check tunnels count on graceful shutdown
* add tray menu item for accept/decline transit tunnels
5 years ago
orignal 2cac9b03ff common code for offline signatures 5 years ago
R4SAS f5f4190803 catch error 10045 on stopping SAM acceptor (#1233), fix warning in util 5 years ago
R4SAS a14d554947 fix tray icon disappearing, var type warning, code tabulation 5 years ago
orignal 6d9e5147b5 handle offline signature 5 years ago
R4SAS 841452cb9e
Merge pull request #1292 from PurpleI2P/inet_pton_xp
inet_pton for winxp
5 years ago
R4SAS 9c76368dbc inet_pton for winxp 5 years ago
orignal bd5122c6ea fixed build error 5 years ago
orignal 6643258618 implement Update for LeaseSet2 5 years ago
orignal bc3f02cb6b fix #1290. copy correct size if message didn't fit previous 5 years ago
orignal d848ae332a encryption keys priority 5 years ago
orignal 08ddc98303 initial LeaseSet2 support in I2CP 5 years ago
orignal a3344c4290 resolve SIGNATURE_TYPE string values 6 years ago
orignal 22c1ce3ea5 don't pick port 9150 (Tor browser) 6 years ago
R4SAS afb14e6782
[fedora] fix build in release on fc30+
fixes #1284
6 years ago
R4SAS e177363377
[fedora] specify srcdir only if building at 30+ 6 years ago
R4SAS ce213934c9
try fix build in fedora rawhide 6 years ago
R4SAS af286ec52e
try fix build in fedora rawhide 6 years ago
R4SAS f7f2b7607b 2.23.0 6 years ago
orignal 60a282826c 2.23.0 6 years ago
r4sas 3eba599aec [android] add addressbook in assets
Sources:
http://inr.i2p/export/alive-hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt
http://identiguy.i2p/hosts.txt

Updated: January ‎18, ‎2019, ‏‎12:00:01 PM
6 years ago
r4sas 74d876f145 [android] update russian strings, add tunnels.d to assets list 6 years ago
r4sas d7609f119c [android] build libi2pd staticly, add update strings, fix messages 6 years ago
orignal 65c2c7d80b re-create LeaseSet if store type has changed 6 years ago
orignal 468a32a819 check LS2 transient key expires time 6 years ago
orignal b89cf73ae2 correct encryption key type for LS2 6 years ago
orignal 9cf43dea1a handle i2cp.leaseSetEncType 6 years ago
orignal 670ffe2078 show LS2 in Leasets' list 6 years ago
orignal 884cf756ed remove invalid leasesets 6 years ago
orignal e44ba54857 show correct LeaseSet's store type 6 years ago
orignal 3712749a94 extract timestamp for LS2 6 years ago
orignal 6569c4aa03 actual key size for LS2 6 years ago
orignal d6b2b3c996 take key type for LS2 from identity 6 years ago
orignal 06c7900ece show LeaseSet type in destination 6 years ago
orignal 52a6a12a9a correct LS2 creation 6 years ago
orignal e647603dce handle i2cp.leaseSetType parameter 6 years ago
orignal dadf6174ba create standard LS2 6 years ago
orignal 84de7675c4 don't copy LS2 for signature verification 6 years ago
orignal 6311a80d0e use clang for android binary build 6 years ago
orignal 9504e69598 LocalLeaseSet2 added 6 years ago
orignal 5398b651f7 handle LS2 in destinations 6 years ago
orignal b5596c4596 handle encrypted LS2 6 years ago
orignal fdcea5537c show LeaseSet's store type 6 years ago
orignal 8ca8bc810d take elgamal percomputation from config 6 years ago
orignal 8f909b051f
Merge pull request #1281 from neheb/b
Fix compilation without deprecated OpenSSL APIs
6 years ago
Rosen Penev 90f2b2d249 Fix compilation without deprecated OpenSSL APIs 6 years ago
orignal f74b27c58c check if chacha20 and poly1305 is presented in openssl build 6 years ago
R4SAS 3f091f4748 remove i2pd-qt android project (closes #1279) 6 years ago
R4SAS d84c9ad611
Merge pull request #1277 from l-n-s/update_zlib_version
CMake: bump version of ZLib
6 years ago
orignal e55e15693d update LS2 leases 6 years ago
orignal c54e6bafdb process meta LS2 6 years ago
orignal 2e56c4895d transient key signature verification 6 years ago
orignal bce4224d6e extract and verify LS2 transient key 6 years ago
orignal 812e2814bc read flags from LS2 header 6 years ago
r4sas 7cd17f8e1f build android app with llvm 6 years ago
orignal 6193b06708 LS2 signature verification and store type 6 years ago
orignal 12af68bdb5 initial support of LeaseSet2 6 years ago
orignal 881f7e9062 correct Authorization header 6 years ago
l-n-s 1db4076bbd CMake: bump version of ZLib 6 years ago
orignal 1933e44719 reseeds update 6 years ago
R4SAS 25441cb650 revert mingw makefile
ref: https://github.com/Alexpux/MINGW-packages/issues/4773
6 years ago
R4SAS bc755ac32f [MSYS2] add boost version detection via pacman 6 years ago
R4SAS 1fa34be52a update mingw makefile 6 years ago
orignal f7a6d57855 fixed bug with loval destination shared between http and socks proxy 6 years ago
orignal 8a987af244 initialize m_Pkey 6 years ago
orignal 65cbb06080 create ephemeral keys after getting connected 6 years ago
orignal 979ea9c252 removed address resolvers as discontinued 6 years ago
orignal aa1f4ee72a fixed possible race condition 6 years ago
orignal 74ce485b73 EdDSA signatures by default 6 years ago
orignal 165e6508f8 EdDSA signatures by default 6 years ago
orignal c7af2889fa removed dummy initializer 6 years ago
orignal 5ab3390434 don't create dummy initializer for android 6 years ago
orignal 67f60f1889 set openssl no_config before boost::asio:ssl 6 years ago
orignal 985a468d0f don't read openssl config file 6 years ago
orignal 34dc6fbdc1 check if session is terminated before sending 6 years ago
orignal b57152cc25 common code for padding and sending termination and RouterInfo messages 6 years ago
orignal dc9562e430 padding for termination message 6 years ago
orignal 05689fe183 padding for short messages 6 years ago
orignal 8f6f95211e eliminate extra copy of RouterInfo 6 years ago
orignal f30b6c9e6e const reference to vector of buffers 6 years ago
orignal 12ac7d6a00 enable sending I2NP messages 6 years ago
orignal 10251a6447 fixed typo 6 years ago
orignal 089cbbc20a rollback 6 years ago
orignal 95ab68acd1 don't copy I2NP messages to NTCP2 frame 6 years ago
orignal abc4f6c70b fixed bug with chacha20 encryption of short messages 6 years ago
orignal 8fc3a1f9c9 correct frame size for I2NP msgs 6 years ago
orignal 5c3d0fc02c create I2NP blocks 6 years ago
orignal 7efb47fed4 send NTCP2 frame from I2NP messages 6 years ago
orignal 7692332f0e don't inialize Chacha20 state twice 6 years ago
orignal ef6db64e9f correct chacha20 for multiple messages 6 years ago
orignal e68f1dbc99 AEAD/Chacha20/Poly1305 encrypt multiple buffers 6 years ago
orignal 0c9ebc36d4 remove AVX and SSE for CipherBlock XOR 6 years ago
R4SAS fcd6eb7801 overwrite user-agent for outproxy requests 6 years ago
orignal 328c2182c2 alignment for tunnel message AES decryption 6 years ago
orignal 08706f5dfb fixed typo 6 years ago
orignal d49f165f0d fixed build warning 6 years ago
orignal cf0fc3a4a9 some performance improvements 6 years ago
orignal 72c8fd257c eliminate extra buffer for Poly1305 6 years ago
orignal fa620e41a4 correct alignment for polyKey 6 years ago
orignal b07f851ce7
Merge pull request #1272 from majestrate/openssl
expose poly1305 digest struct in poly1305.h
6 years ago
Jeff Becker 16b3108719
Merge remote-tracking branch 'purple/openssl' into openssl 6 years ago
Jeff Becker f385c624c7
expose poly1305 digester 6 years ago
orignal f7e9975192 restore BlockCipher XOR using SSE 6 years ago
orignal cde989b59d don't compile compatibility code if openssl 1.1.1 6 years ago
orignal c0e263abd3 default value for m_PersistProfiles 6 years ago
R4SAS 79c0c11e80 configure persist of peer profiles
* If persist.profiles = false, peer profiles not stored on disk
* remove inet_pton for windows
* update configs
6 years ago
orignal ca671551c8 flood NTCP2 RouterInfo if requested 6 years ago
orignal 42ed312384 handle NTCP2 RouterInfo flag 6 years ago
orignal 0e9074aaba reduce start and stop time 6 years ago
orignal 7c1961d4ef Cancel Graceful Stop 6 years ago
orignal 71e57717c2 request memory permisssion for android >= 6 6 years ago
orignal 8a549b83a2 NTP sync in separate thread 6 years ago
orignal d7081c5f23 handle RouterInfo from NTCP2 in netdb's thread 6 years ago
orignal 588d64a30b more NTP logging 6 years ago
orignal 8335bdf3d4 correct ntp servers 6 years ago
orignal 85394f2438 NTP time sync 6 years ago
R4SAS 42b556574f add fedora copr mageia support 6 years ago
orignal f34e65ad9e
Merge pull request #1268 from sokolas/webroot
Added configurable web console URL path
6 years ago
R4SAS 51352a6819 update debian/rpm tunnels.d storing
+ testing rpm changes: manpage and configs store
6 years ago
l-n-s d9887ec370
bump i2pd version in appdata manifest 6 years ago
asokolov c994950aaf default webroot in config, webroot in automatic redirect instead of request path 6 years ago
asokolov a26ed6fe6c Merge remote-tracking branch 'upstream/openssl' into webroot 6 years ago
asokolov a12a7e73f9 redirect with webroot 6 years ago
R4SAS 779228857e 2.22.0 6 years ago
R4SAS 8d0b696d33 packages - tunnels.conf.d fix configs place, links 6 years ago
asokolov 23ae220aa7 add webroot setting 6 years ago
R4SAS b7940e0002 add tunnels.d to packages 6 years ago
orignal b3fd8bd0ae check if keys are available before sending termination message 6 years ago
orignal bffeb237de termination might be send for non-established session 6 years ago
orignal 23e3602ea1 common MixHash 6 years ago
orignal 34cfd205f6 create new static keys by X25519Keys 6 years ago
l-n-s df3da8be7a
Merge pull request #1264 from l-n-s/desktop
fix appdata manifest
6 years ago
l-n-s 940243f45e fix appdata manifest 6 years ago
l-n-s 75d6599143
Update desktop files (#1263)
* Rename files to freedesktop standarts

* Add application icons
6 years ago
l-n-s 929a27a5ac
Add Desktop files (#1261)
* Add appstream and desktop files

* More metadata in appstream file
6 years ago
orignal 82ddee2104
Merge pull request #1260 from l-n-s/version_display
Add --version flag to display i2pd and system libraries versions
6 years ago
l-n-s a141678119 Add --version flag to display i2pd and system libraries versions 6 years ago
orignal 96d109af81 fixed typo 6 years ago
orignal a309eb9f3c faster CipherBlock XOR implementation for non-AVX 6 years ago
orignal d034dab265 fill m3p2 with SessionRequest 6 years ago
orignal 883a035e5c Merge branch 'openssl' of https://github.com/PurpleI2P/i2pd into openssl 6 years ago
orignal 08603091c5 2.21.1 6 years ago
orignal a2e84e5a1e 2.21.1 6 years ago
Jeff Becker d148898ad7
Merge remote-tracking branch 'purple/openssl' into openssl 6 years ago
orignal 9439621849 fixed #1259. read extra tunnels from tunnels.d 6 years ago
orignal 36cf622979
Merge pull request #1258 from PurpleI2P/openssl
long I2NP messages
6 years ago
orignal 15ded89618 set cost=14 for unpublished NTCP2 addresses 6 years ago
orignal b84f74c167 limit SSU message size to 32K 6 years ago
orignal a97300f8be fixed #1256 I2NP messages up to 64K 6 years ago
orignal 9e12cff317 fix #1253 handle incorrect values of SIGNATURE_TYPE and CRYPTO_TYPE 6 years ago
R4SAS ecdf1f4ddc updated debian patches, add patch disabling few settings in service file, fix name in control file 6 years ago
orignal 5e31e533e2
Merge pull request #1249 from PurpleI2P/openssl
2.21.0
6 years ago
orignal 5ecd04dd4f
Merge pull request #1240 from PurpleI2P/openssl
eddsa from 1.1.1
6 years ago
Jeff Becker fb26e78ecc
Merge branch 'openssl' of https://github.com/purplei2p/i2pd into openssl 6 years ago
Jeff Becker 4c687036c4
enable socks outproxy 6 years ago
orignal 73b6338f62
Merge pull request #1229 from PurpleI2P/openssl
2.20
6 years ago
orignal 8490e7ca7c
Merge pull request #1223 from PurpleI2P/openssl
recent changes
6 years ago
orignal fb229d4064
Merge pull request #1203 from PurpleI2P/openssl
2.19
6 years ago

@ -0,0 +1,39 @@
# editorconfig.org
root = true
[*]
# Unix style files
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[Makefile,Makefile.*]
indent_style = tab
indent_size = 4
[*.cmd]
indent_style = space
indent_size = 2
end_of_line = crlf
[*.{h,cpp}]
indent_style = tab
indent_size = 4
[*.rc]
indent_style = space
indent_size = 4
[*.{md,markdown}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
[*.yml]
indent_style = space
indent_size = 2
[*.patch]
trim_trailing_whitespace = false

1
.gitattributes vendored

@ -0,0 +1 @@
/build/build_mingw.cmd eol=crlf

@ -0,0 +1,61 @@
name: Build Debian packages
on:
push:
branches:
- '*'
paths:
- .github/workflows/build-deb.yml
- contrib/**
- daemon/**
- debian/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Makefile
- Makefile.linux
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
build:
name: ${{ matrix.dist }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dist: ['buster', 'bullseye', 'bookworm']
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Commit Hash
id: commit
uses: prompt/actions-commit-hash@v3.0.0
- name: Build package
uses: jtdor/build-deb-action@v1
with:
docker-image: debian:${{ matrix.dist }}-slim
buildpackage-opts: --build=binary --no-sign
before-build-hook: debchange --controlmaint --local "+${{ steps.commit.outputs.short }}~${{ matrix.dist }}" -b --distribution ${{ matrix.dist }} "CI build"
extra-build-deps: devscripts git
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: i2pd_${{ matrix.dist }}
path: debian/artifacts/i2pd_*.deb
- name: Upload debugging symbols
uses: actions/upload-artifact@v4
with:
name: i2pd-dbgsym_${{ matrix.dist }}
path: debian/artifacts/i2pd-dbgsym_*.deb

@ -0,0 +1,50 @@
name: Build on FreeBSD
on:
push:
branches:
- '*'
paths:
- .github/workflows/build-freebsd.yml
- build/CMakeLists.txt
- build/cmake_modules/**
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Makefile
- Makefile.bsd
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
build:
runs-on: ubuntu-latest
name: with UPnP
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test in FreeBSD
id: test
uses: vmactions/freebsd-vm@v1
with:
usesh: true
mem: 2048
sync: rsync
copyback: true
prepare: pkg install -y devel/cmake devel/gmake devel/boost-libs security/openssl net/miniupnpc
run: |
cd build
cmake -DWITH_UPNP=ON -DCMAKE_BUILD_TYPE=Release .
gmake -j2
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: i2pd-freebsd
path: build/i2pd

@ -0,0 +1,45 @@
name: Build on OSX
on:
push:
branches:
- '*'
paths:
- .github/workflows/build-osx.yml
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Makefile
- Makefile.homebrew
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
build:
name: With USE_UPNP=${{ matrix.with_upnp }}
runs-on: macOS-latest
strategy:
fail-fast: true
matrix:
with_upnp: ['yes', 'no']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install required formulae
run: |
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
brew update
brew install boost miniupnpc openssl@1.1
- name: List installed formulae
run: brew list
- name: Build application
run: make HOMEBREW=1 USE_UPNP=${{ matrix.with_upnp }} PREFIX=$GITHUB_WORKSPACE/output -j3

@ -0,0 +1,80 @@
name: Build on Windows with MSVC
on:
push:
branches:
- '*'
paths:
- .github/workflows/build-windows-msvc.yml
- build/CMakeLists.txt
- build/cmake_modules/**
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Win32/**
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
build:
name: Build
runs-on: windows-latest
env:
boost_path: ${{ github.workspace }}\boost_1_83_0
openssl_path: ${{ github.workspace }}\openssl_3_2_1
strategy:
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build and install zlib
run: |
powershell -Command "(Invoke-WebRequest -Uri https://raw.githubusercontent.com/r4sas/zlib.install/master/install.bat -OutFile install_zlib.bat)"
powershell -Command "(Get-Content install_zlib.bat) | Set-Content install_zlib.bat" # fixing line endings
set BUILD_TYPE=Debug
./install_zlib.bat
set BUILD_TYPE=Release
./install_zlib.bat
del install_zlib.bat
- name: Install Boost
run: |
powershell -Command "(Start-BitsTransfer -Source https://sourceforge.net/projects/boost/files/boost-binaries/1.83.0/boost_1_83_0-msvc-14.3-64.exe/download -Destination boost_1_83_0-msvc-14.3-64.exe)"
./boost_1_83_0-msvc-14.3-64.exe /DIR="${{env.boost_path}}" /VERYSILENT /SUPPRESSMSGBOXES /SP-
- name: Install OpenSSL
run: |
powershell -Command "(Start-BitsTransfer -Source https://slproweb.com/download/Win64OpenSSL-3_2_1.exe -Destination Win64OpenSSL-3_2_1.exe)"
./Win64OpenSSL-3_2_1.exe /DIR="${{env.openssl_path}}" /TASKS="copytobin" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-
- name: Make copy of the OpenSSL libraries for CMake
run: |
dir ${{ github.workspace }}
dir ${{env.openssl_path}}\lib\VC
dir ${{env.openssl_path}}\lib\VC\x64\
dir ${{env.openssl_path}}\lib\VC\x64\MTd\
xcopy /s /y "${{env.openssl_path}}\lib\VC\x64\MTd" "${{env.openssl_path}}\lib"
- name: Configure
working-directory: build
run: cmake -DBoost_ROOT="${{env.boost_path}}" -DOPENSSL_ROOT_DIR="${{env.openssl_path}}" -DWITH_STATIC=ON .
- name: Build
working-directory: build
run: cmake --build . --config Debug -- -m
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: i2pd-msvc
path: build/Debug/i2pd.*

@ -0,0 +1,241 @@
name: Build on Windows
on:
push:
branches:
- '*'
paths:
- .github/workflows/build-windows.yml
- build/CMakeLists.txt
- build/cmake_modules/**
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Win32/**
- Makefile
- Makefile.mingw
tags:
- '*'
pull_request:
branches:
- '*'
defaults:
run:
shell: msys2 {0}
jobs:
build:
name: ${{ matrix.arch }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include: [
{ msystem: UCRT64, arch: ucrt-x86_64, arch_short: x64-ucrt, compiler: gcc },
{ msystem: CLANG64, arch: clang-x86_64, arch_short: x64-clang, compiler: clang },
{ msystem: MINGW64, arch: x86_64, arch_short: x64, compiler: gcc },
{ msystem: MINGW32, arch: i686, arch_short: x86, compiler: gcc }
]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
install: base-devel git mingw-w64-${{ matrix.arch }}-${{ matrix.compiler }} mingw-w64-${{ matrix.arch }}-boost mingw-w64-${{ matrix.arch }}-openssl mingw-w64-${{ matrix.arch }}-miniupnpc
update: true
- name: Install additional clang packages
if: ${{ matrix.msystem == 'CLANG64' }}
run: pacman --noconfirm -S mingw-w64-${{ matrix.arch }}-gcc-compat
- name: Build application
run: |
mkdir -p obj/Win32 obj/libi2pd obj/libi2pd_client obj/daemon
make USE_UPNP=yes DEBUG=no USE_GIT_VERSION=yes -j3
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: i2pd-${{ matrix.arch_short }}.exe
path: i2pd.exe
build-cmake:
name: CMake ${{ matrix.arch }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include: [
{ msystem: UCRT64, arch: ucrt-x86_64, arch_short: x64-ucrt, compiler: gcc },
{ msystem: CLANG64, arch: clang-x86_64, arch_short: x64-clang, compiler: clang },
{ msystem: MINGW64, arch: x86_64, arch_short: x64, compiler: gcc },
{ msystem: MINGW32, arch: i686, arch_short: x86, compiler: gcc }
]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
install: base-devel git mingw-w64-${{ matrix.arch }}-cmake mingw-w64-${{ matrix.arch }}-ninja mingw-w64-${{ matrix.arch }}-${{ matrix.compiler }} mingw-w64-${{ matrix.arch }}-boost mingw-w64-${{ matrix.arch }}-openssl mingw-w64-${{ matrix.arch }}-miniupnpc
update: true
- name: Build application
run: |
cd build
cmake -DWITH_GIT_VERSION=ON -DWITH_STATIC=ON -DWITH_UPNP=ON -DCMAKE_BUILD_TYPE=Release .
cmake --build . -- -j3
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: i2pd-cmake-${{ matrix.arch_short }}.exe
path: build/i2pd.exe
build-xp:
name: XP
runs-on: windows-latest
strategy:
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: MINGW32
install: base-devel git mingw-w64-i686-gcc mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-miniupnpc
cache: true
update: true
- name: Clone MinGW packages repository
run: git clone https://github.com/msys2/MINGW-packages
# headers
- name: Get headers package version
id: version-headers
run: |
echo "version=$(pacman -Si mingw-w64-i686-headers-git | grep -Po '^Version\s*: \K.+')" >> $GITHUB_OUTPUT
- name: Cache headers package
uses: actions/cache@v4
id: cache-headers
with:
path: MINGW-packages/mingw-w64-headers-git/*.zst
key: winxp-headers-${{ steps.version-headers.outputs.version }}
- name: Build WinXP-capable headers package
if: steps.cache-headers.outputs.cache-hit != 'true'
run: |
cd MINGW-packages/mingw-w64-headers-git
sed -i 's/0x601/0x501/' PKGBUILD
MINGW_ARCH=mingw32 makepkg-mingw -sCLf --noconfirm --nocheck
- name: Install headers package
run: pacman --noconfirm -U MINGW-packages/mingw-w64-headers-git/mingw-w64-i686-*-any.pkg.tar.zst
# CRT
- name: Get crt package version
id: version-crt
run: |
echo "version=$(pacman -Si mingw-w64-i686-crt-git | grep -Po '^Version\s*: \K.+')" >> $GITHUB_OUTPUT
- name: Cache crt package
uses: actions/cache@v4
id: cache-crt
with:
path: MINGW-packages/mingw-w64-crt-git/*.zst
key: winxp-crt-${{ steps.version-crt.outputs.version }}
- name: Build WinXP-capable crt package
if: steps.cache-crt.outputs.cache-hit != 'true'
run: |
cd MINGW-packages/mingw-w64-crt-git
MINGW_ARCH=mingw32 makepkg-mingw -sCLf --noconfirm --nocheck
- name: Install crt package
run: pacman --noconfirm -U MINGW-packages/mingw-w64-crt-git/mingw-w64-i686-*-any.pkg.tar.zst
# winpthreads
- name: Get winpthreads package version
id: version-winpthreads
run: |
echo "version=$(pacman -Si mingw-w64-i686-winpthreads-git | grep -Po '^Version\s*: \K.+')" >> $GITHUB_OUTPUT
- name: Cache winpthreads package
uses: actions/cache@v4
id: cache-winpthreads
with:
path: MINGW-packages/mingw-w64-winpthreads-git/*.zst
key: winxp-winpthreads-${{ steps.version-winpthreads.outputs.version }}
- name: Build WinXP-capable winpthreads package
if: steps.cache-winpthreads.outputs.cache-hit != 'true'
run: |
cd MINGW-packages/mingw-w64-winpthreads-git
MINGW_ARCH=mingw32 makepkg-mingw -sCLf --noconfirm --nocheck
- name: Install winpthreads package
run: pacman --noconfirm -U MINGW-packages/mingw-w64-winpthreads-git/mingw-w64-i686-*-any.pkg.tar.zst
# OpenSSL
- name: Get openssl package version
id: version-openssl
run: |
echo "version=$(pacman -Si mingw-w64-i686-openssl | grep -Po '^Version\s*: \K.+')" >> $GITHUB_OUTPUT
- name: Cache openssl package
uses: actions/cache@v4
id: cache-openssl
with:
path: MINGW-packages/mingw-w64-openssl/*.zst
key: winxp-openssl-${{ steps.version-openssl.outputs.version }}
- name: Build WinXP-capable openssl package
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: |
cd MINGW-packages/mingw-w64-openssl
gpg --recv-keys D894E2CE8B3D79F5
MINGW_ARCH=mingw32 makepkg-mingw -sCLf --noconfirm --nocheck
- name: Install openssl package
run: pacman --noconfirm -U MINGW-packages/mingw-w64-openssl/mingw-w64-i686-*-any.pkg.tar.zst
# Boost
- name: Get boost package version
id: version-boost
run: |
echo "version=$(pacman -Si mingw-w64-i686-boost | grep -Po '^Version\s*: \K.+')" >> $GITHUB_OUTPUT
- name: Cache boost package
uses: actions/cache@v4
id: cache-boost
with:
path: MINGW-packages/mingw-w64-boost/*.zst
key: winxp-winpthreads-${{ steps.version-boost.outputs.version }}
- name: Build WinXP-capable boost package
if: steps.cache-boost.outputs.cache-hit != 'true'
run: |
cd MINGW-packages/mingw-w64-boost
MINGW_ARCH=mingw32 makepkg-mingw -sCLf --noconfirm --nocheck
- name: Install boost package
run: pacman --noconfirm -U MINGW-packages/mingw-w64-boost/mingw-w64-i686-*-any.pkg.tar.zst
# Building i2pd
- name: Build application
run: |
mkdir -p obj/Win32 obj/libi2pd obj/libi2pd_client obj/daemon
make USE_UPNP=yes DEBUG=no USE_GIT_VERSION=yes USE_WINXP_FLAGS=yes -j3
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: i2pd-xp.exe
path: i2pd.exe

@ -0,0 +1,67 @@
name: Build on Ubuntu
on:
push:
branches:
- '*'
paths:
- .github/workflows/build.yml
- build/CMakeLists.txt
- build/cmake_modules/**
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Makefile
- Makefile.linux
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
build-make:
name: Make with USE_UPNP=${{ matrix.with_upnp }}
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
with_upnp: ['yes', 'no']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: install packages
run: |
sudo apt-get update
sudo apt-get install build-essential libboost-all-dev libminiupnpc-dev libssl-dev zlib1g-dev
- name: build application
run: make USE_UPNP=${{ matrix.with_upnp }} -j3
build-cmake:
name: CMake with -DWITH_UPNP=${{ matrix.with_upnp }}
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
with_upnp: ['ON', 'OFF']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: install packages
run: |
sudo apt-get update
sudo apt-get install build-essential cmake libboost-all-dev libminiupnpc-dev libssl-dev zlib1g-dev
- name: build application
run: |
cd build
cmake -DWITH_UPNP=${{ matrix.with_upnp }} .
make -j3

@ -0,0 +1,140 @@
name: Build containers
on:
push:
branches:
- openssl
- docker
paths:
- .github/workflows/docker.yml
- contrib/docker/**
- contrib/certificates/**
- daemon/**
- i18n/**
- libi2pd/**
- libi2pd_client/**
- Makefile
- Makefile.linux
tags:
- '*'
jobs:
build:
name: Building container for ${{ matrix.platform }}
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
strategy:
matrix:
include: [
{ platform: 'linux/amd64', archname: 'amd64' },
{ platform: 'linux/386', archname: 'i386' },
{ platform: 'linux/arm64', archname: 'arm64' },
{ platform: 'linux/arm/v7', archname: 'armv7' },
]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build container for ${{ matrix.archname }}
uses: docker/build-push-action@v5
with:
context: ./contrib/docker
file: ./contrib/docker/Dockerfile
platforms: ${{ matrix.platform }}
push: true
tags: |
purplei2p/i2pd:latest-${{ matrix.archname }}
ghcr.io/purplei2p/i2pd:latest-${{ matrix.archname }}
provenance: false
push:
name: Pushing merged manifest
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
needs: build
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push latest manifest image to Docker Hub
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: Noelware/docker-manifest-action@master
with:
inputs: purplei2p/i2pd:latest
images: purplei2p/i2pd:latest-amd64,purplei2p/i2pd:latest-i386,purplei2p/i2pd:latest-arm64,purplei2p/i2pd:latest-armv7
push: true
- name: Create and push latest manifest image to GHCR
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: Noelware/docker-manifest-action@master
with:
inputs: ghcr.io/purplei2p/i2pd:latest
images: ghcr.io/purplei2p/i2pd:latest-amd64,ghcr.io/purplei2p/i2pd:latest-i386,ghcr.io/purplei2p/i2pd:latest-arm64,ghcr.io/purplei2p/i2pd:latest-armv7
push: true
- name: Store release version to env
if: ${{ startsWith(github.ref, 'refs/tags/') }}
run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV
- name: Create and push release manifest to Docker Hub
if: ${{ startsWith(github.ref, 'refs/tags/') }}
uses: Noelware/docker-manifest-action@master
with:
inputs: purplei2p/i2pd:latest,purplei2p/i2pd:latest-release,purplei2p/i2pd:release-${{ env.RELEASE_VERSION }}
images: purplei2p/i2pd:latest-amd64,purplei2p/i2pd:latest-i386,purplei2p/i2pd:latest-arm64,purplei2p/i2pd:latest-armv7
push: true
- name: Create and push release manifest to GHCR
if: ${{ startsWith(github.ref, 'refs/tags/') }}
uses: Noelware/docker-manifest-action@master
with:
inputs: ghcr.io/purplei2p/i2pd:latest,ghcr.io/purplei2p/i2pd:latest-release,ghcr.io/purplei2p/i2pd:release-${{ env.RELEASE_VERSION }}
images: ghcr.io/purplei2p/i2pd:latest-amd64,ghcr.io/purplei2p/i2pd:latest-i386,ghcr.io/purplei2p/i2pd:latest-arm64,ghcr.io/purplei2p/i2pd:latest-armv7
push: true

17
.gitignore vendored

@ -3,11 +3,17 @@
router.info
router.keys
i2p
libi2pd.so
netDb
/i2pd
/libi2pd.a
/libi2pdclient.a
/libi2pdlang.a
/libi2pd.so
/libi2pdclient.so
/libi2pdlang.so
/libi2pd.dll
/libi2pdclient.dll
/libi2pdlang.dll
*.exe
@ -254,13 +260,20 @@ docs/generated
build/Makefile
# debian stuff
debian/i2pd.1.gz
.pc/
# qt
qt/i2pd_qt/*.ui.autosave
qt/i2pd_qt/*.autosave
qt/i2pd_qt/*.ui.bk*
qt/i2pd_qt/*.ui_*
#unknown android stuff
android/libs/
#various logs
*LOGS/
qt/build-*.sh*

@ -1,54 +0,0 @@
language: cpp
cache:
apt: true
os:
- linux
#- osx
dist: trusty
sudo: required
compiler:
- g++
- clang++
env:
global:
- MAKEFLAGS="-j 2"
matrix:
- BUILD_TYPE=make UPNP=ON MAKE_UPNP=yes
- BUILD_TYPE=make UPNP=OFF MAKE_UPNP=no
- BUILD_TYPE=cmake UPNP=ON MAKE_UPNP=yes
- BUILD_TYPE=cmake UPNP=OFF MAKE_UPNP=no
matrix:
exclude:
- os: osx
env: BUILD_TYPE=cmake UPNP=ON MAKE_UPNP=yes
- os: osx
env: BUILD_TYPE=cmake UPNP=OFF MAKE_UPNP=no
- os: linux
compiler: clang++
env: BUILD_TYPE=make UPNP=ON MAKE_UPNP=yes
- os: linux
compiler: clang++
env: BUILD_TYPE=make UPNP=OFF MAKE_UPNP=no
addons:
apt:
packages:
- build-essential
- cmake
- g++
- clang
- libboost-chrono-dev
- libboost-date-time-dev
- libboost-filesystem-dev
- libboost-program-options-dev
- libboost-system-dev
- libboost-thread-dev
- libminiupnpc-dev
- libssl-dev
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libressl miniupnpc ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew outdated boost || brew upgrade boost ; fi
script:
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$BUILD_TYPE" == "cmake" ]]; then cd build && cmake -DCMAKE_BUILD_TYPE=Release -DWITH_UPNP=${UPNP} && make ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$BUILD_TYPE" == "make" ]]; then make USE_UPNP=${MAKE_UPNP} ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make HOMEBREW=1 USE_UPNP=${MAKE_UPNP} ; fi

@ -1,6 +1,826 @@
# for this file format description,
# see https://github.com/olivierlacan/keep-a-changelog
## [2.52.0] - 2024-05-12
### Added
- Separate threads for persisting RouterInfos and profiles to disk
- Give preference to address with direct connection
- Exclude addresses with incorrect static or intro key
- Avoid two firewalled routers in the row in tunnel
- Drop unsolicited database search replies
### Changed
- Increase number of hashes to 16 in exploratory lookup reply
- Reduce number of a RouterInfo lookup attempts to 5
- Reset stream RTO if outbound tunnel was changed
- Insert previously excluded floodfill back when successfully connected
- Increase maximum stream resend attempts to 9
- Reply to exploratory lookups with only confirmed routers if low tunnel build rate
- Don't accept too old RouterInfo
- Build client tunnels through confirmed routers only if low tunnel build rate
- Manage netDb requests more frequently
- Don't reply with closer than us only floodfills for lookup
### Fixed
- Crash on router lookup if exploratory pool is not ready
- Race condition in excluded peers for next lookup
- Excessive number of lookups for same destination
- Race condition with transport peers during shutdown
- Corrupted RouterInfo files
## [2.51.0] - 2024-04-06
### Added
- Non-blocking mode for UDP sockets
- Set SSU2 socket buffer size based on bandwidth limit
- Encrypted tunnel tests
- Support for multiple UDP server tunnels on one destination
- Publish medium congestion indication
- Local domain sockets for SOCKS proxy upstream
- Tunnel status "declined" in web console
- SAM error reply "Incompatible crypto" if remote destination has incompatible crypto
- Reduce amount of traffic by handling local message drops
- Keep SSU2 socket open even if it fails to bind
- Lower SSU2 resend traffic spikes
- Expiration for messages in SSU2 send queue
- Use EWMA for stream RTT estimation
- Request choking delay if too many NACKs in stream
- Allow 0ms latency for tunnel
- Randomize tunnels selection for tests
### Changed
- Upstream SOCKS proxy from SOCKS4 to SOCKS5
- Transit tunnels limit to 4 bytes. Default value to 10K
- Reply CANT_REACH_PEER if connect to ourselves in SAM
- Don't send already expired I2NP messages
- Use monotonic timer to measure tunnel test latency
- Standard NTCP2 frame doesn't exceed 16K
- Always send request through tunnels in case of restricted routes
- Don't delete connected routers from NetDb
- Send lookup reply directly to reply tunnel gateway if possible
- Reduce unreachable router ban interval to 8 minutes
- Don't request banned routers / don't try to connect to unreachable router
- Consider 'M' routers as low bandwidth
- Limit minimal received SSU2 packet size to 40 bytes
- Bob picks peer test session only if Charlie's address supports peer testing
- Reject peer test msg 2 if peer testing is not supported
- Don't request termination if SSU2 session was not established
- Set maximum SSU2 queue size depending on RTT value
- New streaming RTT calculation algorithm
- Don't double initial RTO for streams when changing tunnels
- Restore failed tunnel if test or data for inbound tunnel received
- Don't fail last remaining tunnel in pool
- Publish LeasetSet again if local destination was not ready or no tunnels
- Make more attempts to pick high bandwidth hop for client tunnel
- Reduced SSU2 session termination timeout to 165 seconds
- Reseeds list
### Fixed
- ECIESx25519 symmetric key tagset early expiration
- Encrypted LeaseSet lookup
- Outbound tunnel build fails if it's endpoint is the same as reply tunnel gateway
- I2PControl RouterManager returns invalid JSON when unknown params are passed
- Mix of data between different UDP sessions on the same server
- TARGET_OS_SIMULATOR check
- Handling of "reservedrange" param
- New NTCP2 session gets teminated upon termination of old one
- New SSU2 session gets teminated upon termination of old one
- Peer test to non-supporting router
- Streaming ackThrough off 1 if number of NACKs exceeds 255
- Race condition in ECIESx25519 tags table
- Good tunnel becomes failed
- Crash when packet comes to terminated stream
- Stream hangs during LeaseSet update
## [2.50.2] - 2024-01-06
###Fixed
- Crash with OpenSSL 3.2.0
- False positive clock skew detection
## [2.50.1] - 2023-12-23
###Fixed
- Support for new EdDSA usage behavior in OpenSSL 3.2.0
## [2.50.0] - 2023-12-18
### Added
- Support of concurrent ACCEPTs on SAM 3.1
- Haiku OS support
- Low bandwidth and far routers can expire before 1 hour
### Changed
- Don't pick too active peer for first hop
- Try peer test again if status is Unknown
- Send peer tests with random delay
- Reseeds list
### Fixed
- XSS vulnerability in addresshelper
- Publishing NAT64 ipv6 addresses
- Deadlock in AsyncSend callback
## [2.49.0] - 2023-09-18
### Added
- Handle SOCK5 authorization with empty user/password
- Drop incoming transport sessions from too old or from future routers
- Memory pool for router profiles
- Allow 0 hops in explicitPeers
### Changed
- Separate network and testing status
- Remove AVX code
- Improve NTCP2 transport session logging
- Select router with ipv4 for tunnel endpoint
- Consider all addresses non-published for U and H routers even if they have host/port
- Don't pick completely unreachable routers for tunnels
- Exclude SSU1 introducers from SSU2 addresses
- Don't create paired inbound tunnel if length is different
- Remove introducer from RouterInfo after 60 minutes
- Reduce SSU2 keep alive interval and add keep alive interval variance
- Don't pick too old sessions for introducer
### Fixed
- Version of the subnegotiation in user/password SOCKS5 response
- Send keepalive for existing session with introducer
- Buffer offset for EVP_EncryptFinal_ex() to include outlen
- Termination block size processing for transport sessions
- Crash if deleted BOB destination was shared between few BOB sessions
- Introducers with zero tag
- Padding for SSU2 path response
## [2.48.0] - 2023-06-12
### Added
- Allow user/password authentication method for SOCK5 proxy
- Publish reject all congestion cap 'G' if transit is not accepted
- 'critical' log level
- Print b32 on webconsole destination page
- Webconsole button to drop a remote LeaseSet
- limits.zombies param - minimum percentage of successfully created tunnels for routers cleanup
- Recognize real routers if successfully connected or responded to tunnel build request
### Changed
- Bypass slow transport sessions for first hop selection
- Limit AESNI inline asm to x86/x64
- Create smaller I2NP packets if possible
- Make router unreachable if AEAD tag verification fails in SessionCreated
- Don't include a router to floodfills list until it's confirmed as real
- Drop LeaseSet store request if not floodfill
- Bypass medium congestion('D') routers for client tunnels
- Publish encrypted RouterInfo through tunnels
- Check if s is valid x25519 public key
- Check if socket is open before sending data in SSU2
### Fixed
- Webconsole empty page if destination is not found
- i2p.streaming.answerPings param
- Reload tunnels
- Address caps for unspecified ipv6 address
- Incomplete HTTP headers in I2P tunnels
- SSU2 socket network exceptions on Windows
- Use of 'server' type tunnel port as inport (#1936)
## [2.47.0] - 2023-03-11
### Added
- Congestion caps
- SAM UDP port parameter
- Support domain addresses for yggdrasil reseeds
### Changed
- DHT for floodfills instead plain list
- Process router's messages in separate thread
- Don't publish non-reachable router
- Send and check target destination in first streaming SYN packet
- Reseeds list
### Fixed
- Memory leak in windows network state detection
- Reseed attempts from invalid address
## [2.46.1] - 2023-02-20
### Fixed
- Race condition while getting router's peer profile
- Creation of new router.info
- Displaying LeaseSets in the webconsole
- Crash when processing ACK request
## [2.46.0] - 2023-02-15
### Added
- Limit number of acked SSU2 packets to 511
- Localization to Swedish, Portuguese, Turkish, Polish
- Periodically send Datetime block in NTCP2 and SSU2
- Don't select random port from reserved
- In memory table for peer profiles
- Store if router was unreachable in it's peer profile
- Show IPv6 addresses in square brackets in webconsole
- Check referer when processing Addresshelper
### Changed
- Algorithm for tunnel creation success rate calculation
- Drop incoming NTCP2 and SSU2 connection if published IP doesn't match actual endpoint
- Exclude actually unreachable router from netdb for 2 hours
- Select first hop from high bandwidth peers for client tunnels
- Drop too long or too short LeaseSet
- Delete router from netdb if became invalid after update
- Terminate existing session if clock skew detected
- Close previous UDP socket if open before reopening
- Minimal version for floodfill is 0.9.51
- Sort transports by endpoints in webconsole
### Fixed
- Deadlock during processing I2NP block with Garlic in ECIES encrypted message to router
- Race condition with encrypted LeaseSets
- HTTP query detection
- Connection attempts to IPs from invalid ranges
- Publish "0.0.0.0" in RouterInfo
- Crash upon receiving PeerTest 7
- Tunnels for closed SAM session socket
- Missing NTCP2 address in RouterInfo if enabled back
## [2.45.1] - 2023-01-11
### Added
- Full Cone NAT status error
### Changed
- Drop duplicated I2NP messages in SSU2
- Set rejection code 30 if tunnel with id already exists
- Network status is always OK if peer test msg 5 received
### Fixed
- UPnP crash if SSU2 or NTCP2 is disabled
- Crash on termination for some platforms
## [2.45.0] - 2023-01-03
### Added
- Test for Symmetric NAT with peer test msgs 6 and 7
- Webconsole "No Descriptors" router error state
- 1 and 15 seconds bandwidth calculation for i2pcontrol
- Show non-zero send queue size for transports in web console
- Compressible padding for I2P addresses
- Localization to Czech
- Don't accept incoming session from invalid/reserved addresses for NTCP2 and SSU2
- Limit simultaneous tunnel build requests by 4 per pool
### Changed
- Removed SSU support
- Reduced bandwidth calculation interval from 60 to 15 seconds
- Increased default max transit tunnels number from 2500 to 5000 or 10000 for floodfill
- Transit tunnels limit is doubled if floodfill mode is enabled
- NTCP2 and SSU2 timestamps are rounded to seconds
- Drop RouterInfos and LeaseSets with timestamp from future
- Don't delete unreachable routers if tunnel creation success rate is too low
- Refuse duplicated incoming pending NTCP2 session from same IP
- Don't send SSU2 termination again if termination received block received
- Handle standard network error for SSU2 without throwing an exception
- Don't select overloaded peer for next tunnel
- Remove "X-Requested-With" in HTTP Proxy for non-AJAX requests
### Fixed
- File descriptors leak
- Random crash on AddressBook update
- Crash if incorrect LeaseSet size
- Spamming to log if no descriptors
- ::1 address in RouterInfo
- SSU2 network error handling (especially for Windows)
- Race condition with pending outgoing SSU2 sessions
- RTT self-reduction for long-live streams
## [2.44.0] - 2022-11-20
### Added
- SSL connection for server I2P tunnels
- Localization to Italian and Spanish
- SSU2 through SOCKS5 UDP proxy
- Reload tunnels through web console
- SSU2 send immediate ack request flag
- SSU2 send and verify path challenge
- Configurable ssu2.mtu4 and ssu2.mtu6
### Changed
- SSU2 is enabled and SSU is disabled by default
- Separate network status and error
- Random selection between NTCP2 and SSU2 priority
- Added notbob.i2p to jump services
- Remove DoNotTrack flag from HTTP Request header
- Skip addresshelper page if destination was not changed
- SSU2 allow different ports from RelayReponse and HolePunch
- SSU2 resend PeerTest msg 1 and msg 2
- SSU2 Send Retry instead SessionCreated if clock skew detected
### Fixed
- Long HTTP headers for HTTP proxy and HTTP server tunnel
- SSU2 resends and resend limits
- Crash at startup if addressbook is disabled
- NTCP2 ipv6 connection through SOCKS5 proxy
- SSU2 SessionRequest with zero token
- SSU2 MTU less than 1280
- SSU2 port=1
- Incorrect addresses from network interfaces
- Definitions for Darwin PPC; do not use pthread_setname_np
## [2.43.0] - 2022-08-22
### Added
- Complete SSU2 implementation
- Localization to Chinese
- Send RouterInfo update for long live sessions
- Explicit ipv6 ranges of known tunnel brokers for MTU detection
- Always send "Connection: close" and strip out Keep-Alive for server HTTP tunnel
- Show ports for all transports in web console
- Translation of webconsole site title
- Support for Windows ProgramData path when running as service
- Ability to turn off address book
- Handle signals TSTP and CONT to stop and resume network
### Changed
- Case insensitive headers for server HTTP tunnel
- Do not show 'Address registration' line if LeaseSet is encrypted
- SSU2 transports have higher priority than SSU
- Disable ElGamal precalculated table if no SSU
- Deprecate limits.ntcpsoft, limits.ntcphard and limits.ntcpthreads config options
- SSU2 is enabled and SSU is disabled by default for new installations
### Fixed
- Typo with Referer header name in HTTP proxy
- Can't handle garlic message from an exploratory tunnel
- Incorrect encryption key for exploratory lookup reply
- Bound checks issues in LeaseSets code
- MTU detection on Windows
- Crash on stop of active server tunnel
- Send datagram to wrong destination in SAM
- Incorrect static key in RouterInfo if the keys were regenerated
- Duplicated sessions in BOB
## [2.42.1] - 2022-05-24
### Fixed
- Incorrect jump link in HTTP Proxy
## [2.42.0] - 2022-05-22
### Added
- Preliminary SSU2 implementation
- Tunnel length variance
- Localization to French
- Daily cleanup of obsolete peer profiles
- Ordered jump services list in HTTP proxy
- Win32 service
- Show port for local non-published SSU addresses in web console
### Changed
- Maximum RouterInfo length increased to 3K
- Skip unknown addresses in RouterInfo
- Don't pick own router for peer test
- Reseeds list
- Internal numeric id for families
- Use ipv6 preference only when netinet headers not used
- Close stream if delete requested
- Remove version from title in web console
- Drop MESHNET build option
- Set data path before initialization
- Don't show registration block in web console if token is not provided
### Fixed
- Encrypted LeaseSet for EdDSA signature
- Clients tunnels are not built if clock is not synced on start
- Incorrect processing of i2cp.dontPublishLeaseSet param
- UDP tunnels reload
- Build for LibreSSL 3.5.2
- Race condition in short tunnel build message
- Race condition in local RouterInfo buffer allocation
## [2.41.0] - 2022-02-20
### Added
- Clock syncronization through SSU
- Drop routers older than 6 months on start
- Localization to German
- Don't send streaming ack too frequently
- Select compatible outbound tunnel for I2CP messages
- Restart webconsole's acceptor in case of exception
### Changed
- Use builtin bitswap for endian on windows
- Send SessionCreated before connection close if clock skew
- Try another floodfill for publishing if no compatible tunnels found
- Reduce memory usage for RouterInfo structures
- Avoid duplicated addresses in RouterInfo. Check presence of netId and version
- Use TCP/IP sockets for I2CP on Android instead local sockets
- Return uptime as integer in I2PControl
- Reseed servers list/cerificates
- Webconsole's dark style colors
### Fixed
- Attempt to use Yggdrasil on start on Android
- Attempts to send peer tests to itself
- Severe packets drop in SSU
- Crash on tunnel tests
- Loading addressbook subscriptions from config
- Multiple I2CP session to the same destination
- Build on Apple Silicon
## [2.40.0] - 2021-11-29
### Added
- Keep alive parameter for client tunnels
- Support openssl 3.0.0
- Localization to Armenian
- Show git commit info in version
- Windows menu item for opening datadir
- Reseed if too few floodfills
- Don't publish old and replacing tunnel in LeaseSet
- Webconsole light/dark theme depending on system settings (via CSS)
### Changed
- Set gzip compression to false by default
- Build tunnel through ECIES routers only
- Removed ElGamal support for tunnels
- Moved webconsole resources to separate file
- Pick tunnels with compatible transport with another tunnel of floodfill
- Use common cleanup timer for all SSU sessions
- Reduced memory usage
- Reseed servers list
- i18n code called from ClientContext
### Fixed
- Tunnels reload
- Some typos in log messages
- Cleanup relay requests table
- Server tunnel is not published
- Build on GNU/Hurd. Disable pthread_setname_np
- Crash when incorrect sigtype used with blinding
## [2.39.0] - 2021-08-23
### Added
- Short tunnel build messages
- Localization. To: Russian, Ukrainian, Turkmen, Uzbek and Afrikaans
- Custom CSS styles for webconsole
- Avoid slow tunnels with more than 250 ms per hop
- Process DELAY_REQUESTED streaming option
- "certsdir" options for certificates location
- Keep own RouterInfo in NetBb
- Pick ECIES routers only for tunnels on non-x64
- NTP sync through ipv6
- Allow ipv6 addresses for UDP server tunnels
### Changed
- Rekey of all routers to ECIES
- Better distribution for random tunnel's peer selection
- Yggdrasil reseed for v0.4, added two more
- Encryption type 0,4 by default for server tunnels
- Handle i2cp.dontPublishLeaseSet param for all destinations
- reg.i2p for subscriptions
- LeaseSet type 3 by default
- Don't allocate payload buffer for every single ECIESx25519 message
- Prefer public ipv6 instead rfc4941
- Optimal padding for one-time ECIESx25519 message
- Don't send datetime block for one-time ECIESx25519 message with one-time key
- Router with expired introducer is still valid
- Don't disable floodfill if still reachable by ipv6
- Set minimal version for floodfill to 0.9.38
- Eliminate extra lookups for sequential fragments on tunnel endpoint
- Consistent path for explicit peers
- Always create new tunnel from exploratory pool
- Don't try to connect to a router not reachable from us
- Mark additional ipv6 addresses/nets as reserved (#1679)
### Fixed
- Zero-hop tunnels
- Crash upon SAM session termination
- Build with boost < 1.55.0
- Address type for NTCP2 acceptors
- Check of ipv4/ipv6 address
- Request router to send to if not in NetDb
- Count outbound traffic for zero-hop tunnels
- URLdecode domain for registration string generator in webconsole
## [2.38.0] - 2021-05-17
### Added
- Publish ipv6 introducers
- Bind ipv6 or yggdrasil NTCP2 acceptor to specified address
- Support .b32.i2p addresses and hostnames for SAM STREAM CREATE
- ipv6 peer tests
- Publish iexp param for introducers
- Show ipv6 network status on the webconsole
- EdDSA signing keys can also be blinded
- Show router version on the webconsole
### Changed
- Rekey of all routers but floodfills to ECIES
- Increased number of precalculated x25519 keys to 15
- Don't publish LeaseSet without inbound tunnels
- Reseed from compatible address(ipv4 or ipv6)
- Recongnize v4 and v6 SSU addresses without host
- Inbound tunnel gateway must be ipv4 compatible
- Don't select next introducers from existing sessions
- Set X bandwidth for floodfill by default
### Fixed
- Incoming ECIES-x25519 session doesn't send updated LeaseSet
- Unique local address for server tunnels
- Race condition for LeaseSet creation in I2CP
- Relay tag for ipv6 introducer
- Already expired introducers
- Find connected router for first peer in tunnel
- Failed outgoing ECIES-x25519 session's tagset stays forever
- Yggdrasil address disappears if router becomes unreachable through ipv6
- Ignore SSU address/introducers if port is not specified
- Check identity and signature length for SSU SessionConfirmed
## [2.37.0] - 2021-03-15
### Added
- Address registration line for reg.i2p and stats.i2p through the web console
- "4" and "6" caps for addresses without published IP address
- Mesh and Proxy network statuses
- Symmetric NAT network status error
- Bind server tunnel connection to specified address
- lookuplocal BOB extended command
- address4 and address6 parameters to bind outgoing connections to
- Rekey of low-bandwidth routers to ECIES
- Popup notification windows when unable to parse config for Windows
### Changed
- Floodfills with "U" cap are not ignored anymore
- Check transports reachability between tunnel peers and between router and floodfill
- NTCP2 and reseed HTTP proxy support authorization now
- Show actual IP addresses for proxy connections
- Publish and handle SSU addreses without host
- Outbound tunnel endpoint must be ipv4 compatible
- Logging optimization
- Removed Windows service
### Fixed
- Incoming SSU session terminates after 5 seconds
- Outgoing NTCP2 ipv4 session even if ipv4 is disabled
- No incoming Yggdrasil connection if connected through NTCP2 proxy
- Race condition between tunnel build and floodfill requests decryption for ECIES routers
- Numeric bandwidth limitation
- Yggdrasil for Android
## [2.36.0] - 2021-02-15
### Added
- Encrypted lookup and publications to ECIES-x25519 floodfiils
- Yggdrasil transports and reseeds
- Dump addressbook in hosts.txt format
- Request RouterInfo through exploratory tunnels if direct connection to fllodfill is not possible
- Threads naming
- Check if public x25519 key is valid
- ECIES-X25519-AEAD-Ratchet for shared local destination
- LeaseSet creation timeout for I2CP session
- Resend RouterInfo after some interval for longer NTCP2 sessions
- Select reachable router of inbound tunnel gateway
- Reseed if no compatible routers in netdb
- Refresh on swipe in Android webconsole
### Changed
- reg.i2p for default addressbook instead inr.i2p
- ECIES-x25519 (crypto type 4) for new routers
- Try to connect to all compatible addresses from peer's RouterInfo
- Replace LeaseSet completely if store type changes
- Try ECIES-X25519-AEAD-Ratchet tag before ElGamal
- Don't detach ECIES-X25519-AEAD-Ratchet session from destination immediately
- Viewport and styles on error in HTTP proxy
- Don't create notification when Windows taskbar restarted
- Cumulative SSU ACK bitfields
- limit tunnel length to 8 hops
- Limit tunnels quantity to 16
### Fixed
- Handling chunked HTTP response in addressbook
- Missing ECIES-X25519-AEAD-Ratchet tags for multiple streams with the same destination
- Correct NAME for NAMING REPLY in SAM
- SSU crash on termination
- Offline signature length for stream close packet
- Don't send updated LeaseSet through a terminated session
- Decryption of follow-on ECIES-X25519-AEAD-Ratchet NSR messages
- Non-confirmed LeaseSet is resent too late for ECIES-X25519-AEAD-Ratchet session
## [2.35.0] - 2020-11-30
### Added
- ECIES-x25519 routers
- Random intro keys for SSU
- Graceful shutdown timer for windows
- Send queue for I2CP messages
- Update DSA router keys to EdDSA
- TCP_QUICKACK for NTCP2 sockets on Linux
### Changed
- Exclude floodfills with DSA signatures and < 0.9.28
- Random intervals between tunnel tests and manage for tunnel pools
- Don't replace an addressbook record by one with DSA signature
- Publish RouterInfo after update
- Create paired inbound tunnels if no inbound tunnels yet
- Reseed servers list
### Fixed
- Transient signature length, if different from identity
- Terminate I2CP session if destroyed
- RouterInfo publishing confirmation
- Check if ECIES-X25519-AEAD-Ratchet session expired before generating more tags
- Correct block size for delivery type local for ECIES-X25519-AEAD-Ratchet
## [2.34.0] - 2020-10-27
### Added
- Ping responses for streaming
- STREAM FORWARD for SAM
- Tunnels through ECIES-x25519 routers
- Single thread for I2CP
- Shared transient destination between proxies
- Database lookups from ECIES destinations with ratchets response
- Handle WebDAV HTTP methods
- Don't try to connect or build tunnels if offline
- Validate IP when trying connect to remote peer
- Handle ICMP responses and WinAPI errors for SSU
### Changed
- Removed NTCP
- Dropped gcc 4.7 support
- Encyption type 0,4 by default for client tunnels
- Stripped out some HTTP header for HTTP server response
- HTTP 1.1 addressbook requests
- Set LeaseSet type to 3 for ratchets if not specified
- Handle SSU v4 and v6 messages in one thread
- Eliminate DH keys thread
### Fixed
- Random crashes on I2CP session disconnect
- Stream through racthets hangs if first SYN was not acked
- Check "Last-Modified" instead "If-Modified-Since" for addressbook reponse
- Trim behind ECIESx25519 tags
- Few bugs with Android main activity
- QT visual and layout issues
## [2.33.0] - 2020-08-24
### Added
- Shared transient addresses
- crypto.ratchet.inboundTags paramater
- Multiple encryption keys through I2CP
- Pre-calculated x25519 ephemeral keys
- Change datagram routing path if nothing comes back in 10 seconds
- Shared routing path for datagram session
### Changed
- UDP tunnels send mix of repliable and raw datagrams in bulk
- Encrypt SSU packet again upon resend
- Start new tunnel message if remaining buffer is too small
- Use LeaseSet2 for ECIES-X25519-AEAD-Ratchet automatically
- Save new ECIES-X25519-AEAD-Ratchet session with NSR tagset
- Generate random padding lengths for ECIES-X25519-AEAD-Ratchet in bulk
- Webconsole layout
- Reseed servers list
### Fixed
- Don't connect through terminated SAM destination
- Differentiate UDP server sessions by port
- ECIES-X25519-AEAD-Ratchet through I2CP
- Don't save invalid address to AddressBook
- ECDSA signatures names in SAM
- AppArmor profile
## [2.32.1] - 2020-06-02
### Added
- Read explicit peers in tunnels config
### Fixed
- Generation of tags for detached sessions
- Non-updating LeaseSet1
- Start when deprecated websocket options present in i2pd.conf
## [2.32.0] - 2020-05-25
### Added
- Multiple encryption types for local destinations
- Next key and tagset for ECIES-X25519-AEAD-Ratchet
- NTCP2 through SOCKS proxy
- Throw error message if any port to bind is occupied
- gzip parameter for UDP tunnels
- Show ECIES-X25519-AEAD-Ratchet sessions and tags on the web console
- Simplified implementation of gzip for no compression mode
- Allow ECIES-X25519-AEAD-Ratchet session restart after 2 minutes
- Added logrotate config for rpm package
### Changed
- Select peers for client tunnels among routers >= 0.9.36
- Check ECIES flag for encrypted lookup reply
- Streaming MTU size 1812 for ECIES-X25519-AEAD-Ratchet
- Don't calculate checksum for Data message send through ECIES-X25519-AEAD-Ratchet
- Catch network connectivity status for Windows
- Stop as soon as no more transit tunnels during graceful shutdown for Android
- RouterInfo gzip compression level depends on size
- Send response to received datagram from ECIES-X25519-AEAD-Ratchet session
- Update webconsole functional
- Increased max transit tunnels limit
- Reseeds list
- Dropped windows support in cmake
### Fixed
- Correct timestamp check for LeaseSet2
- Encrypted leaseset without authentication
- Change SOCKS proxy connection response for clients without socks5h support (#1336)
## [2.31.0] - 2020-04-10
### Added
- NTCP2 through HTTP proxy
- Publish LeaseSet2 for I2CP destinations
- Show status page on main activity for android
- Handle ECIESFlag in DatabaseLookup at floodfill
- C++17 features for eligible compilers
### Changed
- Droped Websockets and Lua support
- Send DeliveryStatusMsg for LeaseSet for ECIES-X25519-AEAD-Ratchet
- Keep sending new session reply until established for ECIES-X25519-AEAD-Ratchet
- Updated SSU log messages
- Reopen SSU socket on exception
- Security hardening headers in web console
- Various web console changes
- Various QT changes
### Fixed
- NTCP2 socket descriptors leak
- Race condition with router's identity in transport sessions
- Not terminated streams remain forever
## [2.30.0] - 2020-02-25
### Added
- Single threaded SAM
- Experimental support of ECIES-X25519-AEAD-Ratchet crypto type
### Changed
- Minimal MTU size is 1280 for ipv6
- Use unordered_map instead map for destination's sessions and tags list
- Use std::shuffle instead std::random_shuffle
- SAM is single threaded by default
- Reseeds list
### Fixed
- Correct termination of streaming destination
- Extra ',' in RouterInfo response in I2PControl
- SAM crash on session termination
- Storage for Android 10
## [2.29.0] - 2019-10-21
### Added
- Client auth flag for b33 address
### Changed
- Remove incoming NTCP2 session from pending list when established
- Handle errors for NTCP2 SessionConfrimed send
### Fixed
- Failure to start on Windows XP
- SAM crash if invalid lookup address
- Possible crash when UPnP enabled on shutdown
## [2.28.0] - 2019-08-27
### Added
- RAW datagrams in SAM
- Publishing encrypted LeaseSet2 with DH or PSH authentication
- Ability to disable battery optimization for Android
- Transport Network ID Check
### Changed
- Set and handle published encrypted flag for LeaseSet2
### Fixed
- ReceiveID changes in the same stream
- "\r\n" command terminator in SAM
- Addressbook lines with signatures
## [2.27.0] - 2019-07-03
### Added
- Support of PSK and DH authentication for encrypted LeaseSet2
### Changed
- Uptime is based on monotonic timer
### Fixed
- BOB status command response
- Correct NTCP2 port if NTCP is disabled
- Flood encrypted LeaseSet2 with store hash
## [2.26.0] - 2019-06-07
### Added
- HTTP method "PROPFIND"
- Detection of external ipv6 address through the SSU
- NTCP2 publishing depends on network status
### Changed
- ntcp is disabled by default, ntcp2 is published by default
- Response to BOB's "list" command
- ipv6 address is not longer NTCP's local endpoint's address
- Reseeds list
- HTTP_REFERER stripping in httpproxy (#823)
### Fixed
- Check and handle incorrect BOB input
- Ignore introducers for NTCP or NTCP2 addresses
- RouterInfo check from NTCP2
## [2.25.0] - 2019-05-09
### Added
- Create, publish and handle encrypted LeaseSet2
- Support of b33 addresses
- RedDSA key blinding
- .b32.i2p addresses in jump links
- ntcp2.addressv6 parameter
### Changed
- Allow HTTP headers without value
- Set data directory from external storage path for Android
- addresshelper support is configurable per tunnel
- gradlew script for android build
### Fixed
- Deletion of expired encrypted LeaseSet2 on floodfills
- ipv6 fallback address
- SSU incoming packets routing
## [2.24.0] - 2019-03-21
### Added
- Support of transient keys for LeaseSet2
- Support of encrypted LeaseSet2
- Recognize signature type 11 (RedDSA)
- Support websocket connections over HTTP proxy
- Ability to disable full addressbook persist
### Changed
- Don't load peer profiles if non-persistant
- REUSE_ADDR for ipv6 acceptors
- Reset eTags if addressbook can't be loaded
### Fixed
- Build with boost 1.70
- Filter out unspecified addresses from RouterInfo
- Check floodfill status change
- Correct SAM response for invalid key
- SAM crash on termination for Windows
- Race condition for publishing
## [2.23.0] - 2019-01-21
### Added
- Standard LeaseSet2 support
- Ability to adjust timestamps through the NTP
- Ability to disable peer profile persist
- Request permission for android >= 6
- Initial addressbook to android assets
- Cancel graceful shutdown for android
- Russian translation for android
### Changed
- Chacha20 and Poly1305 implementation
- Eliminate extra copy of NTCP2 send buffers
- Extract content of tunnel.d from assets on android
- Removed name resolvers from transports
- Update reseed certificates
### Fixed
- LeaseSet published content verification
- Exclude invalid LeaseSets from the list on a floodfill
- Build for OpenWrt with openssl 1.1.1
## [2.22.0] - 2018-11-09
### Added
- Multiple tunnel config files from tunnels.d folder
### Changed
- Fetch own RouterInfo upon SessionRequest for NTCP2
- Faster XOR between AES blocks for non AVX capable CPUs
### Fixed
- Fixed NTCP2 termination send
## [2.21.1] - 2018-10-22
### Changed
- cost=13 for unpublished NTCP2 address
### Fixed
- Handle I2NP messages longer than 32K
## [2.21.0] - 2018-10-04
### Added
- EdDSA, x25519 and SipHash from openssl 1.1.1
@ -24,7 +844,7 @@
- NTCP2 is enabled by default
- Show lease's expiration time in readable format in the web console
### Fixed
- Correct names for transports in the web console
- Correct names for transports in the web console
## [2.19.0] - 2018-06-26
### Added
@ -188,7 +1008,7 @@
### Added
- Datagram i2p tunnels
- Unique local addresses for server tunnels
- Configurable list of reseed servers and initial addressbook
- Configurable list of reseed servers and initial addressbook
- Configurable netid
- Initial iOS support

@ -1,4 +1,4 @@
Copyright (c) 2013-2015, The PurpleI2P Project
Copyright (c) 2013-2023, The PurpleI2P Project
All rights reserved.

@ -1,24 +1,44 @@
.DEFAULT_GOAL := all
SYS := $(shell $(CXX) -dumpmachine)
SHLIB := libi2pd.so
ifneq (, $(findstring darwin, $(SYS)))
SHARED_SUFFIX = dylib
else ifneq (, $(findstring mingw, $(SYS))$(findstring windows-gnu, $(SYS))$(findstring cygwin, $(SYS)))
SHARED_SUFFIX = dll
else
SHARED_SUFFIX = so
endif
SHLIB := libi2pd.$(SHARED_SUFFIX)
ARLIB := libi2pd.a
SHLIB_CLIENT := libi2pdclient.so
SHLIB_LANG := libi2pdlang.$(SHARED_SUFFIX)
ARLIB_LANG := libi2pdlang.a
SHLIB_CLIENT := libi2pdclient.$(SHARED_SUFFIX)
ARLIB_CLIENT := libi2pdclient.a
SHLIB_WRAP := libi2pdwrapper.$(SHARED_SUFFIX)
ARLIB_WRAP := libi2pdwrapper.a
I2PD := i2pd
GREP := grep
DEPS := obj/make.dep
LIB_SRC_DIR := libi2pd
LIB_CLIENT_SRC_DIR := libi2pd_client
WRAP_SRC_DIR := libi2pd_wrapper
LANG_SRC_DIR := i18n
DAEMON_SRC_DIR := daemon
# import source files lists
include filelist.mk
USE_AESNI := yes
USE_AVX := yes
USE_STATIC := no
USE_MESHNET := no
USE_UPNP := no
DEBUG := yes
USE_AESNI := $(or $(USE_AESNI),yes)
USE_STATIC := $(or $(USE_STATIC),no)
USE_UPNP := $(or $(USE_UPNP),no)
DEBUG := $(or $(DEBUG),yes)
# for debugging purposes only, when commit hash needed in trunk builds in i2pd version string
USE_GIT_VERSION := $(or $(USE_GIT_VERSION),no)
# for MacOS only, waiting for "1", not "yes"
HOMEBREW := $(or $(HOMEBREW),0)
ifeq ($(DEBUG),yes)
CXX_DEBUG = -g
@ -27,8 +47,8 @@ else
LD_DEBUG = -s
endif
ifeq ($(WEBSOCKETS),1)
NEEDED_CXXFLAGS += -DWITH_EVENTS
ifneq (, $(DESTDIR))
PREFIX = $(DESTDIR)
endif
ifneq (, $(findstring darwin, $(SYS)))
@ -38,36 +58,54 @@ ifneq (, $(findstring darwin, $(SYS)))
else
include Makefile.osx
endif
else ifneq (, $(findstring mingw, $(SYS))$(findstring windows-gnu, $(SYS))$(findstring cygwin, $(SYS)))
DAEMON_SRC += Win32/DaemonWin32.cpp Win32/Win32App.cpp Win32/Win32Service.cpp Win32/Win32NetState.cpp
include Makefile.mingw
else ifneq (, $(findstring linux, $(SYS))$(findstring gnu, $(SYS)))
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
include Makefile.linux
else ifneq (, $(findstring freebsd, $(SYS))$(findstring openbsd, $(SYS)))
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
include Makefile.bsd
else ifneq (, $(findstring mingw, $(SYS))$(findstring cygwin, $(SYS)))
DAEMON_SRC += Win32/DaemonWin32.cpp Win32/Win32Service.cpp Win32/Win32App.cpp
include Makefile.mingw
else ifneq (, $(findstring haiku, $(SYS)))
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
include Makefile.haiku
else # not supported
$(error Not supported platform)
$(error Not supported platform)
endif
ifeq ($(USE_MESHNET),yes)
NEEDED_CXXFLAGS += -DMESHNET
INCFLAGS += -I$(LIB_SRC_DIR) -I$(LIB_CLIENT_SRC_DIR) -I$(LANG_SRC_DIR)
DEFINES += -DOPENSSL_SUPPRESS_DEPRECATED
NEEDED_CXXFLAGS += -MMD -MP
ifeq ($(USE_GIT_VERSION),yes)
GIT_VERSION := $(shell git describe --tags)
DEFINES += -DGITVER=$(GIT_VERSION)
endif
NEEDED_CXXFLAGS += -I$(LIB_SRC_DIR) -I$(LIB_CLIENT_SRC_DIR)
LIB_OBJS += $(patsubst %.cpp,obj/%.o,$(LIB_SRC))
LIB_CLIENT_OBJS += $(patsubst %.cpp,obj/%.o,$(LIB_CLIENT_SRC))
LANG_OBJS += $(patsubst %.cpp,obj/%.o,$(LANG_SRC))
DAEMON_OBJS += $(patsubst %.cpp,obj/%.o,$(DAEMON_SRC))
WRAP_LIB_OBJS += $(patsubst %.cpp,obj/%.o,$(WRAP_LIB_SRC))
DEPS += $(LIB_OBJS:.o=.d) $(LIB_CLIENT_OBJS:.o=.d) $(LANG_OBJS:.o=.d) $(DAEMON_OBJS:.o=.d) $(WRAP_LIB_OBJS:.o=.d)
all: mk_obj_dir $(ARLIB) $(ARLIB_CLIENT) $(I2PD)
## Build all code (libi2pd, libi2pdclient, libi2pdlang), link it to .a and build binary
all: $(ARLIB) $(ARLIB_CLIENT) $(ARLIB_LANG) $(I2PD)
mk_obj_dir:
@mkdir -p obj
@mkdir -p obj/Win32
@mkdir -p obj/$(LIB_SRC_DIR)
@mkdir -p obj/$(LIB_CLIENT_SRC_DIR)
@mkdir -p obj/$(LANG_SRC_DIR)
@mkdir -p obj/$(DAEMON_SRC_DIR)
@mkdir -p obj/$(WRAP_SRC_DIR)
@mkdir -p obj/Win32
api: mk_obj_dir $(SHLIB) $(ARLIB)
api_client: mk_obj_dir $(SHLIB) $(ARLIB) $(SHLIB_CLIENT) $(ARLIB_CLIENT)
api: $(SHLIB) $(ARLIB)
client: $(SHLIB_CLIENT) $(ARLIB_CLIENT)
lang: $(SHLIB_LANG) $(ARLIB_LANG)
api_client: api client lang
wrapper: api_client $(SHLIB_WRAP) $(ARLIB_WRAP)
## NOTE: The NEEDED_CXXFLAGS are here so that CXXFLAGS can be specified at build time
## **without** overwriting the CXXFLAGS which we need in order to build.
@ -76,40 +114,53 @@ api_client: mk_obj_dir $(SHLIB) $(ARLIB) $(SHLIB_CLIENT) $(ARLIB_CLIENT)
## -std=c++11. If you want to remove this variable please do so in a way that allows setting
## custom FLAGS to work at build-time.
deps: mk_obj_dir
$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) -MM *.cpp > $(DEPS)
@sed -i -e '/\.o:/ s/^/obj\//' $(DEPS)
obj/%.o: %.cpp
$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) $(CPU_FLAGS) -c -o $@ $<
obj/%.o: %.cpp | mk_obj_dir
$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(DEFINES) $(INCFLAGS) -c -o $@ $<
# '-' is 'ignore if missing' on first run
-include $(DEPS)
DAEMON_OBJS += $(patsubst %.cpp,obj/%.o,$(DAEMON_SRC))
$(I2PD): $(DAEMON_OBJS) $(ARLIB) $(ARLIB_CLIENT)
$(CXX) -o $@ $^ $(LDFLAGS) $(LDLIBS)
$(I2PD): $(DAEMON_OBJS) $(ARLIB) $(ARLIB_CLIENT) $(ARLIB_LANG)
$(CXX) $(DEFINES) $(LDFLAGS) -o $@ $^ $(LDLIBS)
$(SHLIB): $(LIB_OBJS)
ifneq ($(USE_STATIC),yes)
$(CXX) $(LDFLAGS) -shared -o $@ $^ $(LDLIBS)
endif
$(SHLIB_CLIENT): $(LIB_CLIENT_OBJS) $(SHLIB) $(SHLIB_LANG)
ifneq ($(USE_STATIC),yes)
$(CXX) $(LDFLAGS) -shared -o $@ $^ $(LDLIBS) $(SHLIB) $(SHLIB_LANG)
endif
$(SHLIB): $(patsubst %.cpp,obj/%.o,$(LIB_SRC))
$(SHLIB_WRAP): $(WRAP_LIB_OBJS)
ifneq ($(USE_STATIC),yes)
$(CXX) $(LDFLAGS) $(LDLIBS) -shared -o $@ $^
$(CXX) $(LDFLAGS) -shared -o $@ $^ $(LDLIBS)
endif
$(SHLIB_CLIENT): $(patsubst %.cpp,obj/%.o,$(LIB_CLIENT_SRC))
$(CXX) $(LDFLAGS) $(LDLIBS) -shared -o $@ $^
$(SHLIB_LANG): $(LANG_OBJS)
ifneq ($(USE_STATIC),yes)
$(CXX) $(LDFLAGS) -shared -o $@ $^ $(LDLIBS)
endif
$(ARLIB): $(LIB_OBJS)
$(AR) -r $@ $^
$(ARLIB_CLIENT): $(LIB_CLIENT_OBJS)
$(AR) -r $@ $^
$(ARLIB): $(patsubst %.cpp,obj/%.o,$(LIB_SRC))
$(ARLIB_WRAP): $(WRAP_LIB_OBJS)
$(AR) -r $@ $^
$(ARLIB_CLIENT): $(patsubst %.cpp,obj/%.o,$(LIB_CLIENT_SRC))
$(ARLIB_LANG): $(LANG_OBJS)
$(AR) -r $@ $^
clean:
$(RM) -r obj
$(RM) -r docs/generated
$(RM) $(I2PD) $(SHLIB) $(ARLIB) $(SHLIB_CLIENT) $(ARLIB_CLIENT)
$(RM) $(I2PD) $(SHLIB) $(ARLIB) $(SHLIB_CLIENT) $(ARLIB_CLIENT) $(SHLIB_LANG) $(ARLIB_LANG) $(SHLIB_WRAP) $(ARLIB_WRAP)
strip: $(I2PD) $(SHLIB_CLIENT) $(SHLIB)
strip: $(I2PD) $(SHLIB) $(SHLIB_CLIENT) $(SHLIB_LANG)
strip $^
LATEST_TAG=$(shell git describe --tags --abbrev=0 openssl)
@ -127,11 +178,13 @@ doxygen:
.PHONY: all
.PHONY: clean
.PHONY: deps
.PHONY: doxygen
.PHONY: dist
.PHONY: last-dist
.PHONY: api
.PHONY: api_client
.PHONY: client
.PHONY: lang
.PHONY: mk_obj_dir
.PHONY: install
.PHONY: strip

@ -6,7 +6,13 @@ CXXFLAGS ?= ${CXX_DEBUG} -Wall -Wextra -Wno-unused-parameter -pedantic -Wno-misl
## (e.g. -fstack-protector-strong -Wformat -Werror=format-security), we do not want to remove
## -std=c++11. If you want to remove this variable please do so in a way that allows setting
## custom FLAGS to work at build-time.
NEEDED_CXXFLAGS = -std=c++11 -D_GLIBCXX_USE_NANOSLEEP=1
CXXVER := $(shell $(CXX) -dumpversion)
ifeq (${CXXVER}, "4.2.1") # older clang always returned 4.2.1
NEEDED_CXXFLAGS = -std=c++11
else # newer versions support C++17
NEEDED_CXXFLAGS = -std=c++17
endif
DEFINES = -D_GLIBCXX_USE_NANOSLEEP=1
INCFLAGS = -I/usr/include/ -I/usr/local/include/
LDFLAGS = ${LD_DEBUG} -Wl,-rpath,/usr/local/lib -L/usr/local/lib
LDLIBS = -lcrypto -lssl -lz -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread

@ -0,0 +1,10 @@
CXX = g++
CXXFLAGS := -Wall -std=c++11
INCFLAGS = -I/system/develop/headers
DEFINES = -D_DEFAULT_SOURCE -D_GNU_SOURCE
LDLIBS = -lbe -lbsd -lnetwork -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
ifeq ($(USE_UPNP),yes)
DEFINES += -DUSE_UPNP
LDLIBS += -lminiupnpc
endif

@ -1,54 +1,56 @@
# root directory holding homebrew
BREWROOT = /usr/local
BREWROOT = /opt/homebrew
BOOSTROOT = ${BREWROOT}/opt/boost
SSLROOT = ${BREWROOT}/opt/openssl@1.1
UPNPROOT = ${BREWROOT}/opt/miniupnpc
CXXFLAGS = ${CXX_DEBUG} -Wall -std=c++11 -DMAC_OSX -Wno-overloaded-virtual
INCFLAGS = -I${SSLROOT}/include -I${BOOSTROOT}/include
LDFLAGS = ${LD_DEBUG}
ifndef TRAVIS
CXX = clang++
endif
CXXFLAGS ?= ${CXX_DEBUG} -Wall -Wno-overloaded-virtual
NEEDED_CXXFLAGS ?= -std=c++11
INCFLAGS ?= -I${SSLROOT}/include -I${BOOSTROOT}/include
LDFLAGS ?= ${LD_DEBUG}
DEFINES += -DMAC_OSX
ifeq ($(USE_STATIC),yes)
LDLIBS = -lz ${SSLROOT}/lib/libcrypto.a ${SSLROOT}/lib/libssl.a ${BOOSTROOT}/lib/libboost_system.a ${BOOSTROOT}/lib/libboost_date_time.a ${BOOSTROOT}/lib/libboost_filesystem.a ${BOOSTROOT}/lib/libboost_program_options.a -lpthread
LDLIBS = -lz ${SSLROOT}/lib/libcrypto.a ${SSLROOT}/lib/libssl.a ${BOOSTROOT}/lib/libboost_system.a ${BOOSTROOT}/lib/libboost_date_time.a ${BOOSTROOT}/lib/libboost_filesystem.a ${BOOSTROOT}/lib/libboost_program_options.a
ifeq ($(USE_UPNP),yes)
LDLIBS += ${UPNPROOT}/lib/libminiupnpc.a
endif
LDLIBS += -lpthread -ldl
else
LDFLAGS += -L${SSLROOT}/lib -L${BOOSTROOT}/lib
LDLIBS = -lz -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
ifeq ($(USE_UPNP),yes)
LDFLAGS += -L${UPNPROOT}/lib
LDLIBS += -lminiupnpc
endif
endif
ifeq ($(USE_UPNP),yes)
LDFLAGS += -ldl
CXXFLAGS += -DUSE_UPNP
DEFINES += -DUSE_UPNP
INCFLAGS += -I${UPNPROOT}/include
ifeq ($(USE_STATIC),yes)
LDLIBS += ${UPNPROOT}/lib/libminiupnpc.a
else
LDFLAGS += -L${UPNPROOT}/lib
LDLIBS += -lminiupnpc
endif
endif
# OSX Notes
# http://www.hutsby.net/2011/08/macs-with-aes-ni.html
# Seems like all recent Mac's have AES-NI, after firmware upgrade 2.2
# Found no good way to detect it from command line. TODO: Might be some osx sysinfo magic
ifeq ($(USE_AESNI),yes)
CXXFLAGS += -maes
ifneq (, $(findstring i386, $(SYS))$(findstring i686, $(SYS))$(findstring x86_64, $(SYS))) # only x86-based CPU supports that
NEEDED_CXXFLAGS += -maes
DEFINES += -D__AES__
endif
ifeq ($(USE_AVX),1)
CXXFLAGS += -mavx
endif
install: all
install -d ${PREFIX}/bin ${PREFIX}/etc/i2pd ${PREFIX}/share/doc/i2pd ${PREFIX}/share/i2pd ${PREFIX}/share/man/man1 ${PREFIX}/var/lib/i2pd
install -m 755 ${I2PD} ${PREFIX}/bin/
install -d ${PREFIX}/bin
install -m 755 ${I2PD} ${PREFIX}/bin
install -d ${PREFIX}/etc ${PREFIX}/etc/i2pd ${PREFIX}/etc/i2pd/tunnels.conf.d
install -m 644 contrib/i2pd.conf contrib/subscriptions.txt contrib/tunnels.conf ${PREFIX}/etc/i2pd
@cp -R contrib/certificates ${PREFIX}/share/i2pd/
install -d ${PREFIX}/share ${PREFIX}/share/doc ${PREFIX}/share/doc/i2pd
install -m 644 ChangeLog LICENSE README.md contrib/i2pd.conf contrib/subscriptions.txt contrib/tunnels.conf ${PREFIX}/share/doc/i2pd
@gzip debian/i2pd.1 && install debian/i2pd.1.gz ${PREFIX}/share/man/man1
@ln -sf ${PREFIX}/share/i2pd/certificates ${PREFIX}/var/lib/i2pd/
install -d ${PREFIX}/share/i2pd
@cp -R contrib/certificates ${PREFIX}/share/i2pd/
install -d ${PREFIX}/share/man ${PREFIX}/share/man/man1
@gzip -kf debian/i2pd.1 && install debian/i2pd.1.gz ${PREFIX}/share/man/man1
install -d ${PREFIX}/var ${PREFIX}/var/lib ${PREFIX}/var/lib/i2pd
@ln -sf ${PREFIX}/share/i2pd/certificates ${PREFIX}/var/lib/i2pd/certificates
@ln -sf ${PREFIX}/etc/i2pd/tunnels.conf.d ${PREFIX}/var/lib/i2pd/tunnels.d
@ln -sf ${PREFIX}/etc/i2pd/i2pd.conf ${PREFIX}/var/lib/i2pd/i2pd.conf
@ln -sf ${PREFIX}/etc/i2pd/subscriptions.txt ${PREFIX}/var/lib/i2pd/subscriptions.txt
@ln -sf ${PREFIX}/etc/i2pd/tunnels.conf ${PREFIX}/var/lib/i2pd/tunnels.conf
@ln -sf ${PREFIX}/etc/i2pd/tunnels.conf ${PREFIX}/var/lib/i2pd/tunnels.conf

@ -1,5 +1,5 @@
# set defaults instead redefine
CXXFLAGS ?= ${CXX_DEBUG} -Wall -Wextra -Wno-unused-parameter -pedantic -Wno-misleading-indentation
CXXFLAGS ?= ${CXX_DEBUG} -Wall -Wextra -Wno-unused-parameter -pedantic -Wno-psabi
LDFLAGS ?= ${LD_DEBUG}
## NOTE: The NEEDED_CXXFLAGS are here so that custom CXXFLAGS can be specified at build time
@ -15,15 +15,17 @@ ifeq ($(shell expr match $(CXX) 'clang'),5)
NEEDED_CXXFLAGS += -std=c++11
else ifeq ($(shell expr match ${CXXVER} "4\.[0-9][0-9]"),4) # gcc >= 4.10
NEEDED_CXXFLAGS += -std=c++11
else ifeq ($(shell expr match ${CXXVER} "4\.[7-9]"),3) # >= 4.7
else ifeq ($(shell expr match ${CXXVER} "4\.[8-9]"),3) # gcc 4.8 - 4.9
NEEDED_CXXFLAGS += -std=c++11 -D_GLIBCXX_USE_NANOSLEEP=1
else ifeq ($(shell expr match ${CXXVER} "4\.6"),3) # = 4.6
NEEDED_CXXFLAGS += -std=c++0x
else ifeq ($(shell expr match ${CXXVER} "[5-7]\.[0-9]"),3) # gcc >= 5.0
else ifeq ($(shell expr match ${CXXVER} "[5-6]"),1) # gcc 5 - 6
NEEDED_CXXFLAGS += -std=c++11
LDLIBS = -latomic
else ifeq ($(shell expr match ${CXXVER} "[7-8]"),1) # gcc 7 ubuntu or gcc 8 arch
NEEDED_CXXFLAGS += -std=c++11
else ifeq ($(shell expr match ${CXXVER} "[7-9]"),1) # gcc 7 - 9
NEEDED_CXXFLAGS += -std=c++17
LDLIBS = -latomic
else ifeq ($(shell expr match ${CXXVER} "1[0-9]"),2) # gcc 10+
# NEEDED_CXXFLAGS += -std=c++20
NEEDED_CXXFLAGS += -std=c++17
LDLIBS = -latomic
else # not supported
$(error Compiler too old)
@ -35,7 +37,7 @@ ifeq ($(USE_STATIC),yes)
# NOTE: on glibc you will get this warning:
# Using 'getaddrinfo' in statically linked applications requires at runtime
# the shared libraries from the glibc version used for linking
LIBDIR := /usr/lib
LIBDIR := /usr/lib/$(SYS)
LDLIBS += $(LIBDIR)/libboost_system.a
LDLIBS += $(LIBDIR)/libboost_date_time.a
LDLIBS += $(LIBDIR)/libboost_filesystem.a
@ -43,37 +45,43 @@ ifeq ($(USE_STATIC),yes)
LDLIBS += $(LIBDIR)/libssl.a
LDLIBS += $(LIBDIR)/libcrypto.a
LDLIBS += $(LIBDIR)/libz.a
LDLIBS += -lpthread -static-libstdc++ -static-libgcc -lrt -ldl
USE_AESNI := no
ifeq ($(USE_UPNP),yes)
LDLIBS += $(LIBDIR)/libminiupnpc.a
endif
LDLIBS += -lpthread -ldl
else
LDLIBS += -lcrypto -lssl -lz -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
ifeq ($(USE_UPNP),yes)
LDLIBS += -lminiupnpc
endif
endif
# UPNP Support (miniupnpc 1.5 and higher)
ifeq ($(USE_UPNP),yes)
CXXFLAGS += -DUSE_UPNP
ifeq ($(USE_STATIC),yes)
LDLIBS += $(LIBDIR)/libminiupnpc.a
else
LDLIBS += -lminiupnpc
endif
DEFINES += -DUSE_UPNP
endif
ifeq ($(USE_AESNI),yes)
#check if AES-NI is supported by CPU
ifneq ($(shell $(GREP) -c aes /proc/cpuinfo),0)
machine := $(shell uname -m)
ifeq ($(machine), aarch64)
CXXFLAGS += -DARM64AES
else
CPU_FLAGS += -maes
endif
ifneq (, $(findstring i386, $(SYS))$(findstring i686, $(SYS))$(findstring x86_64, $(SYS))) # only x86-based CPU supports that
NEEDED_CXXFLAGS += -maes
DEFINES += -D__AES__
endif
endif
ifeq ($(USE_AVX),yes)
#check if AVX supported by CPU
ifneq ($(shell $(GREP) -c avx /proc/cpuinfo),0)
CPU_FLAGS += -mavx
endif
endif
install: all
install -d ${PREFIX}/bin
install -m 755 ${I2PD} ${PREFIX}/bin
install -d ${PREFIX}/etc ${PREFIX}/etc/i2pd ${PREFIX}/etc/i2pd/tunnels.conf.d
install -m 644 contrib/i2pd.conf contrib/subscriptions.txt contrib/tunnels.conf ${PREFIX}/etc/i2pd
install -d ${PREFIX}/share ${PREFIX}/share/doc ${PREFIX}/share/doc/i2pd
install -m 644 ChangeLog LICENSE README.md contrib/i2pd.conf contrib/subscriptions.txt contrib/tunnels.conf ${PREFIX}/share/doc/i2pd
install -d ${PREFIX}/share/i2pd
@cp -R contrib/certificates ${PREFIX}/share/i2pd/
install -d ${PREFIX}/share/man ${PREFIX}/share/man/man1
@gzip -kf debian/i2pd.1 && install debian/i2pd.1.gz ${PREFIX}/share/man/man1
install -d ${PREFIX}/var ${PREFIX}/var/lib ${PREFIX}/var/lib/i2pd
@ln -sf ${PREFIX}/share/i2pd/certificates ${PREFIX}/var/lib/i2pd/certificates
@ln -sf ${PREFIX}/etc/i2pd/tunnels.conf.d ${PREFIX}/var/lib/i2pd/tunnels.d
@ln -sf ${PREFIX}/etc/i2pd/i2pd.conf ${PREFIX}/var/lib/i2pd/i2pd.conf
@ln -sf ${PREFIX}/etc/i2pd/subscriptions.txt ${PREFIX}/var/lib/i2pd/subscriptions.txt
@ln -sf ${PREFIX}/etc/i2pd/tunnels.conf ${PREFIX}/var/lib/i2pd/tunnels.conf

@ -1,54 +1,58 @@
USE_WIN32_APP=yes
CXX = g++
# Build application with GUI (tray, main window)
USE_WIN32_APP := yes
WINDRES = windres
CXXFLAGS := ${CXX_DEBUG} -D_MT -DWIN32 -D_WINDOWS -DWIN32_LEAN_AND_MEAN
NEEDED_CXXFLAGS = -std=c++11
BOOST_SUFFIX = -mt
INCFLAGS = -Idaemon -I.
LDFLAGS := ${LD_DEBUG} -Wl,-Bstatic -static-libgcc -static-libstdc++
CXXFLAGS := $(CXX_DEBUG) -fPIC -msse
INCFLAGS := -I$(DAEMON_SRC_DIR) -IWin32
LDFLAGS := ${LD_DEBUG} -static -fPIC -msse
NEEDED_CXXFLAGS += -std=c++17
DEFINES += -DWIN32_LEAN_AND_MEAN
# UPNP Support
ifeq ($(USE_UPNP),yes)
CXXFLAGS += -DUSE_UPNP -DMINIUPNP_STATICLIB
DEFINES += -DUSE_UPNP -DMINIUPNP_STATICLIB
LDLIBS = -lminiupnpc
endif
LDLIBS += \
-lboost_system$(BOOST_SUFFIX) \
-lboost_date_time$(BOOST_SUFFIX) \
-lboost_filesystem$(BOOST_SUFFIX) \
-lboost_program_options$(BOOST_SUFFIX) \
-lssl \
-lcrypto \
-lz \
$(MINGW_PREFIX)/lib/libboost_system-mt.a \
$(MINGW_PREFIX)/lib/libboost_date_time-mt.a \
$(MINGW_PREFIX)/lib/libboost_filesystem-mt.a \
$(MINGW_PREFIX)/lib/libboost_program_options-mt.a \
$(MINGW_PREFIX)/lib/libssl.a \
$(MINGW_PREFIX)/lib/libcrypto.a \
$(MINGW_PREFIX)/lib/libz.a \
-lwsock32 \
-lws2_32 \
-lgdi32 \
-liphlpapi \
-lstdc++ \
-lcrypt32 \
-lgdi32 \
-lole32 \
-luuid \
-lpthread
ifeq ($(USE_WIN32_APP), yes)
CXXFLAGS += -DWIN32_APP
DEFINES += -DWIN32_APP
LDFLAGS += -mwindows
DAEMON_RC += Win32/Resource.rc
DAEMON_OBJS += $(patsubst %.rc,obj/%.o,$(DAEMON_RC))
endif
# don't change following line to ifeq ($(USE_AESNI),yes) !!!
ifeq ($(USE_AESNI),1)
CPU_FLAGS += -maes
else
CPU_FLAGS += -msse
ifeq ($(USE_WINXP_FLAGS), yes)
DEFINES += -DWINVER=0x0501 -D_WIN32_WINNT=0x0501
endif
ifeq ($(USE_AVX),1)
CPU_FLAGS += -mavx
ifeq ($(USE_AESNI),yes)
NEEDED_CXXFLAGS += -maes
LDFLAGS += -maes
DEFINES += -D__AES__
endif
ifeq ($(USE_ASLR),yes)
LDFLAGS += -Wl,--nxcompat -Wl,--high-entropy-va -Wl,--dynamicbase,--export-all-symbols
endif
obj/%.o : %.rc
$(WINDRES) -i $< -o $@
obj/%.o : %.rc | mk_obj_dir
$(WINDRES) $(DEFINES) $(INCFLAGS) --preprocessor-arg=-MMD --preprocessor-arg=-MP --preprocessor-arg=-MF$@.d -i $< -o $@

@ -1,7 +1,10 @@
CXX = clang++
CXXFLAGS := ${CXX_DEBUG} -Wall -std=c++11 -DMAC_OSX
CXXFLAGS := ${CXX_DEBUG} -Wall -std=c++11
INCFLAGS = -I/usr/local/include
DEFINES := -DMAC_OSX
LDFLAGS := -Wl,-rpath,/usr/local/lib -L/usr/local/lib
LDFLAGS += -Wl,-dead_strip
LDFLAGS += -Wl,-dead_strip_dylibs
ifeq ($(USE_STATIC),yes)
LDLIBS = -lz /usr/local/lib/libcrypto.a /usr/local/lib/libssl.a /usr/local/lib/libboost_system.a /usr/local/lib/libboost_date_time.a /usr/local/lib/libboost_filesystem.a /usr/local/lib/libboost_program_options.a -lpthread
@ -11,7 +14,7 @@ endif
ifeq ($(USE_UPNP),yes)
LDFLAGS += -ldl
CXXFLAGS += -DUSE_UPNP
DEFINES += -DUSE_UPNP
ifeq ($(USE_STATIC),yes)
LDLIBS += /usr/local/lib/libminiupnpc.a
else
@ -19,12 +22,12 @@ ifeq ($(USE_UPNP),yes)
endif
endif
ifeq ($(USE_AESNI),1)
CXXFLAGS += -maes
else
CXXFLAGS += -msse
endif
OSARCH = $(shell uname -p)
ifeq ($(USE_AVX),1)
CXXFLAGS += -mavx
ifneq ($(OSARCH),powerpc)
ifeq ($(USE_AESNI),yes)
CXXFLAGS += -D__AES__ -maes
else
CXXFLAGS += -msse
endif
endif

@ -1,3 +1,12 @@
[![GitHub release](https://img.shields.io/github/release/PurpleI2P/i2pd.svg?label=latest%20release)](https://github.com/PurpleI2P/i2pd/releases/latest)
[![Snapcraft release](https://snapcraft.io/i2pd/badge.svg)](https://snapcraft.io/i2pd)
[![License](https://img.shields.io/github/license/PurpleI2P/i2pd.svg)](https://github.com/PurpleI2P/i2pd/blob/openssl/LICENSE)
[![Packaging status](https://repology.org/badge/tiny-repos/i2pd.svg)](https://repology.org/project/i2pd/versions)
[![Docker Pulls](https://img.shields.io/docker/pulls/purplei2p/i2pd)](https://hub.docker.com/r/purplei2p/i2pd)
[![Crowdin](https://badges.crowdin.net/i2pd/localized.svg)](https://crowdin.com/project/i2pd)
*note: i2pd for Android can be found in [i2pd-android](https://github.com/PurpleI2P/i2pd-android) repository and with Qt GUI in [i2pd-qt](https://github.com/PurpleI2P/i2pd-qt) repository*
i2pd
====
@ -38,11 +47,17 @@ Resources
Installing
----------
The easiest way to install i2pd is by using
[precompiled binaries](https://github.com/PurpleI2P/i2pd/releases/latest).
The easiest way to install i2pd is by using precompiled packages and binaries.
You can fetch most of them on [release](https://github.com/PurpleI2P/i2pd/releases/latest) page.
Please see [documentation](https://i2pd.readthedocs.io/en/latest/user-guide/install/) for more info.
Building
--------
See [documentation](https://i2pd.readthedocs.io/en/latest/) for how to build
i2pd from source on your OS.
note: i2pd with Qt GUI can be found in [i2pd-qt](https://github.com/PurpleI2P/i2pd-qt) repository and for android in [i2pd-android](https://github.com/PurpleI2P/i2pd-android) repository.
Build instructions:
@ -54,13 +69,15 @@ Build instructions:
**Supported systems:**
* GNU/Linux x86/x64 - [![Build Status](https://travis-ci.org/PurpleI2P/i2pd.svg?branch=openssl)](https://travis-ci.org/PurpleI2P/i2pd)
* Windows - [![Build status](https://ci.appveyor.com/api/projects/status/1908qe4p48ff1x23?svg=true)](https://ci.appveyor.com/project/PurpleI2P/i2pd)
* Mac OS X - [![Build Status](https://travis-ci.org/PurpleI2P/i2pd.svg?branch=openssl)](https://travis-ci.org/PurpleI2P/i2pd)
* CentOS / Fedora - [![Build Status](https://copr.fedorainfracloud.org/coprs/supervillain/i2pd/package/i2pd-git/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/supervillain/i2pd/package/i2pd-git/)
* Docker image - [![Build Status](https://dockerbuildbadges.quelltext.eu/status.svg?organization=meeh&repository=i2pd)](https://hub.docker.com/r/meeh/i2pd/builds/)
* FreeBSD
* Android
* GNU/Linux (Debian, Ubuntu, etc) - [![Build on Ubuntu](https://github.com/PurpleI2P/i2pd/actions/workflows/build.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build.yml)
* CentOS, Fedora, Mageia - [![Build Status](https://copr.fedorainfracloud.org/coprs/supervillain/i2pd/package/i2pd-git/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/supervillain/i2pd/package/i2pd-git/)
* Alpine, ArchLinux, openSUSE, Gentoo, etc.
* Windows - [![Build on Windows](https://github.com/PurpleI2P/i2pd/actions/workflows/build-windows.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build-windows.yml)
* Mac OS - [![Build on OSX](https://github.com/PurpleI2P/i2pd/actions/workflows/build-osx.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build-osx.yml)
* Docker image - [![Build containers](https://github.com/PurpleI2P/i2pd/actions/workflows/docker.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/docker.yml)
* Snap - [![i2pd](https://snapcraft.io/i2pd/badge.svg)](https://snapcraft.io/i2pd) [![i2pd](https://snapcraft.io/i2pd/trending.svg?name=0)](https://snapcraft.io/i2pd)
* FreeBSD - [![Build on FreeBSD](https://github.com/PurpleI2P/i2pd/actions/workflows/build-freebsd.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build-freebsd.yml)
* Android - [![Android CI](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml/badge.svg)](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml)
* iOS
Using i2pd
@ -69,15 +86,36 @@ Using i2pd
See [documentation](https://i2pd.readthedocs.io/en/latest/user-guide/run/) and
[example config file](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf).
Localization
------------
You can help us with translation i2pd to your language using Crowdin platform!
Translation project can be found [here](https://crowdin.com/project/i2pd).
New languages can be requested on project's [discussion page](https://crowdin.com/project/i2pd/discussions).
Current status: [![Crowdin](https://badges.crowdin.net/i2pd/localized.svg)](https://crowdin.com/project/i2pd)
Donations
---------
BTC: 3MDoGJW9TLMTCDGrR9bLgWXfm6sjmgy86f
LTC: LKQirrYrDeTuAPnpYq5y7LVKtywfkkHi59
ETH: 0x9e5bac70d20d1079ceaa111127f4fb3bccce379d
DASH: Xw8YUrQpYzP9tZBmbjqxS3M97Q7v3vJKUF
ZEC: t1cTckLuXsr1dwVrK4NDzfhehss4NvMadAJ
GST: GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG
**E-Mail**: ```i2porignal at yandex.com```
**BTC**: ```3MDoGJW9TLMTCDGrR9bLgWXfm6sjmgy86f```
**LTC**: ```LKQirrYrDeTuAPnpYq5y7LVKtywfkkHi59```
**ETH**: ```0x9e5bac70d20d1079ceaa111127f4fb3bccce379d```
**GST**: ```GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG```
**DASH**: ```Xw8YUrQpYzP9tZBmbjqxS3M97Q7v3vJKUF```
**ZEC**: ```t1cTckLuXsr1dwVrK4NDzfhehss4NvMadAJ```
**ANC**: ```AQJYweYYUqM1nVfLqfoSMpUMfzxvS4Xd7z```
**XMR**: ```497pJc7X4xqKvcLBLpSUtRgWqMMyo24u4btCos3cak6gbMkpobgSU6492ztUcUBghyeHpYeczB55s38NpuHoH5WGNSPDRMH```
License
-------

@ -1,3 +1,11 @@
/*
* Copyright (c) 2013-2023, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#include <thread>
#include <clocale>
#include "Config.h"
@ -6,9 +14,10 @@
#include "Log.h"
#ifdef _WIN32
#include "Win32/Win32Service.h"
#include "Win32Service.h"
#ifdef WIN32_APP
#include "Win32/Win32App.h"
#include <windows.h>
#include "Win32App.h"
#endif
namespace i2p
@ -20,46 +29,30 @@ namespace util
setlocale(LC_CTYPE, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
//setlocale(LC_ALL, "Russian");
setlocale(LC_TIME, "C");
if (!Daemon_Singleton::init(argc, argv))
return false;
i2p::log::SetThrowFunction ([](const std::string& s)
{
MessageBox(0, TEXT(s.c_str ()), TEXT("i2pd"), MB_ICONERROR | MB_TASKMODAL | MB_OK );
}
);
std::string serviceControl; i2p::config::GetOption("svcctl", serviceControl);
if (serviceControl == "install")
{
LogPrint(eLogInfo, "WinSVC: installing ", SERVICE_NAME, " as service");
InstallService(
SERVICE_NAME, // Name of service
SERVICE_DISPLAY_NAME, // Name to display
SERVICE_START_TYPE, // Service start type
SERVICE_DEPENDENCIES, // Dependencies
SERVICE_ACCOUNT, // Service running account
SERVICE_PASSWORD // Password of the account
);
return false;
}
else if (serviceControl == "remove")
{
LogPrint(eLogInfo, "WinSVC: uninstalling ", SERVICE_NAME, " service");
UninstallService(SERVICE_NAME);
if (!Daemon_Singleton::init(argc, argv))
return false;
}
if (isDaemon)
{
LogPrint(eLogDebug, "Daemon: running as service");
I2PService service(SERVICE_NAME);
I2PService service((PSTR)SERVICE_NAME);
if (!I2PService::Run(service))
{
LogPrint(eLogError, "Daemon: Service failed to run w/err 0x%08lx\n", GetLastError());
LogPrint(eLogCritical, "Daemon: Service failed to run w/err 0x%08lx\n", GetLastError());
return false;
}
return false;
}
else
LogPrint(eLogDebug, "Daemon: running as user");
return true;
}
@ -68,13 +61,10 @@ namespace util
setlocale(LC_CTYPE, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
//setlocale(LC_ALL, "Russian");
setlocale(LC_TIME, "C");
#ifdef WIN32_APP
if (!i2p::win32::StartWin32App ()) return false;
// override log
i2p::config::SetOption("log", std::string ("file"));
if (!i2p::win32::StartWin32App (isDaemon)) return false;
#endif
bool ret = Daemon_Singleton::start();
if (ret && i2p::log::Logger().GetLogType() == eLogFile)

@ -1,36 +1,36 @@
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
#include "winres.h"
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
MAINICON ICON "mask.ico"
#endif // English (United States) resources
#ifndef APSTUDIO_INVOKED
#include "Resource.rc2"
#endif // not APSTUDIO_INVOKED
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
#include "winres.h"
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
MAINICON ICON "mask.ico"
#endif // English (United States) resources
#ifndef APSTUDIO_INVOKED
#include "Resource.rc2"
#endif // not APSTUDIO_INVOKED

@ -2,7 +2,7 @@
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
#include "../libi2pd/version.h"
#include "version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION I2PD_VERSION_MAJOR,I2PD_VERSION_MINOR,I2PD_VERSION_MICRO,I2PD_VERSION_PATCH
@ -25,7 +25,7 @@ BEGIN
VALUE "FileDescription", "C++ I2P daemon"
VALUE "FileVersion", I2PD_VERSION
VALUE "InternalName", CODENAME
VALUE "LegalCopyright", "Copyright (C) 2013-2017, The PurpleI2P Project"
VALUE "LegalCopyright", "Copyright (C) 2013-2023, The PurpleI2P Project"
VALUE "OriginalFilename", "i2pd"
VALUE "ProductName", "Purple I2P"
VALUE "ProductVersion", I2P_VERSION

@ -1,394 +1,504 @@
#include <string.h>
#include <windows.h>
#include <shellapi.h>
#include "ClientContext.h"
#include "Config.h"
#include "NetDb.hpp"
#include "RouterContext.h"
#include "Transports.h"
#include "Tunnel.h"
#include "version.h"
#include "resource.h"
#include "Daemon.h"
#include "Win32App.h"
#include <stdio.h>
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif
#define ID_ABOUT 2000
#define ID_EXIT 2001
#define ID_CONSOLE 2002
#define ID_APP 2003
#define ID_GRACEFUL_SHUTDOWN 2004
#define ID_STOP_GRACEFUL_SHUTDOWN 2005
#define ID_RELOAD 2006
#define ID_TRAY_ICON 2050
#define WM_TRAYICON (WM_USER + 1)
#define IDT_GRACEFUL_SHUTDOWN_TIMER 2100
#define FRAME_UPDATE_TIMER 2101
namespace i2p
{
namespace win32
{
static void ShowPopupMenu (HWND hWnd, POINT *curpos, int wDefaultItem)
{
HMENU hPopup = CreatePopupMenu();
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_CONSOLE, "Open &console");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_APP, "Show app");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_ABOUT, "&About...");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_RELOAD, "&Reload configs");
if (!i2p::util::DaemonWin32::Instance ().isGraceful)
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_GRACEFUL_SHUTDOWN, "&Graceful shutdown");
else
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_STOP_GRACEFUL_SHUTDOWN, "&Stop graceful shutdown");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_EXIT, "E&xit");
SetMenuDefaultItem (hPopup, ID_CONSOLE, FALSE);
SendMessage (hWnd, WM_INITMENUPOPUP, (WPARAM)hPopup, 0);
POINT p;
if (!curpos)
{
GetCursorPos (&p);
curpos = &p;
}
WORD cmd = TrackPopupMenu (hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_NONOTIFY, curpos->x, curpos->y, 0, hWnd, NULL);
SendMessage (hWnd, WM_COMMAND, cmd, 0);
DestroyMenu(hPopup);
}
static void AddTrayIcon (HWND hWnd)
{
NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uID = ID_TRAY_ICON;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO;
nid.uCallbackMessage = WM_TRAYICON;
nid.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE (MAINICON));
strcpy (nid.szTip, "i2pd");
strcpy (nid.szInfo, "i2pd is starting");
Shell_NotifyIcon(NIM_ADD, &nid );
}
static void RemoveTrayIcon (HWND hWnd)
{
NOTIFYICONDATA nid;
nid.hWnd = hWnd;
nid.uID = ID_TRAY_ICON;
Shell_NotifyIcon (NIM_DELETE, &nid);
}
static void ShowUptime (std::stringstream& s, int seconds)
{
int num;
if ((num = seconds / 86400) > 0) {
s << num << " days, ";
seconds -= num * 86400;
}
if ((num = seconds / 3600) > 0) {
s << num << " hours, ";
seconds -= num * 3600;
}
if ((num = seconds / 60) > 0) {
s << num << " min, ";
seconds -= num * 60;
}
s << seconds << " seconds\n";
}
template <typename size> static void ShowTransfered (std::stringstream& s, size transfer)
{
auto bytes = transfer & 0x03ff;
transfer >>= 10;
auto kbytes = transfer & 0x03ff;
transfer >>= 10;
auto mbytes = transfer & 0x03ff;
transfer >>= 10;
auto gbytes = transfer & 0x03ff;
if (gbytes)
s << gbytes << " GB, ";
if (mbytes)
s << mbytes << " MB, ";
if (kbytes)
s << kbytes << " KB, ";
s << bytes << " Bytes\n";
}
static void PrintMainWindowText (std::stringstream& s)
{
s << "\n";
s << "Status: ";
switch (i2p::context.GetStatus())
{
case eRouterStatusOK: s << "OK"; break;
case eRouterStatusTesting: s << "Testing"; break;
case eRouterStatusFirewalled: s << "Firewalled"; break;
case eRouterStatusError:
{
switch (i2p::context.GetError())
{
case eRouterErrorClockSkew: s << "Clock skew"; break;
default: s << "Error";
}
break;
}
default: s << "Unknown";
}
s << "; ";
s << "Success Rate: " << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate() << "%\n";
s << "Uptime: "; ShowUptime(s, i2p::context.GetUptime ());
s << "\n";
s << "Inbound: " << i2p::transport::transports.GetInBandwidth() / 1024 << " KiB/s; ";
s << "Outbound: " << i2p::transport::transports.GetOutBandwidth() / 1024 << " KiB/s\n";
s << "Received: "; ShowTransfered (s, i2p::transport::transports.GetTotalReceivedBytes());
s << "Sent: "; ShowTransfered (s, i2p::transport::transports.GetTotalSentBytes());
s << "\n";
s << "Routers: " << i2p::data::netdb.GetNumRouters () << "; ";
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << "; ";
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "\n";
s << "Tunnels: ";
s << "In: " << i2p::tunnel::tunnels.CountInboundTunnels() << "; ";
s << "Out: " << i2p::tunnel::tunnels.CountOutboundTunnels() << "; ";
s << "Transit: " << i2p::tunnel::tunnels.CountTransitTunnels() << "\n";
s << "\n";
}
static LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
AddTrayIcon (hWnd);
break;
}
case WM_CLOSE:
{
RemoveTrayIcon (hWnd);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
KillTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER);
PostQuitMessage (0);
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ID_ABOUT:
{
std::stringstream text;
text << "Version: " << I2PD_VERSION << " " << CODENAME;
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_EXIT:
{
PostMessage (hWnd, WM_CLOSE, 0, 0);
return 0;
}
case ID_GRACEFUL_SHUTDOWN:
{
i2p::context.SetAcceptsTunnels (false);
SetTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER, 10*60*1000, nullptr); // 10 minutes
i2p::util::DaemonWin32::Instance ().isGraceful = true;
return 0;
}
case ID_STOP_GRACEFUL_SHUTDOWN:
{
i2p::context.SetAcceptsTunnels (true);
KillTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER);
i2p::util::DaemonWin32::Instance ().isGraceful = false;
return 0;
}
case ID_RELOAD:
{
i2p::client::context.ReloadConfig();
std::stringstream text;
text << "I2Pd reloading configs...";
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_CONSOLE:
{
char buf[30];
std::string httpAddr; i2p::config::GetOption("http.address", httpAddr);
uint16_t httpPort; i2p::config::GetOption("http.port", httpPort);
snprintf(buf, 30, "http://%s:%d", httpAddr.c_str(), httpPort);
ShellExecute(NULL, "open", buf, NULL, NULL, SW_SHOWNORMAL);
return 0;
}
case ID_APP:
{
ShowWindow(hWnd, SW_SHOW);
SetTimer(hWnd, FRAME_UPDATE_TIMER, 3000, NULL);
return 0;
}
}
break;
}
case WM_SYSCOMMAND:
{
switch (wParam)
{
case SC_MINIMIZE:
{
ShowWindow(hWnd, SW_HIDE);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
return 0;
}
case SC_CLOSE:
{
std::string close; i2p::config::GetOption("close", close);
if (0 == close.compare("ask"))
switch(::MessageBox(hWnd, "Would you like to minimize instead of exiting?"
" You can add 'close' configuration option. Valid values are: ask, minimize, exit.",
"Minimize instead of exiting?", MB_ICONQUESTION | MB_YESNOCANCEL | MB_DEFBUTTON1))
{
case IDYES: close = "minimize"; break;
case IDNO: close = "exit"; break;
default: return 0;
}
if (0 == close.compare("minimize"))
{
ShowWindow(hWnd, SW_HIDE);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
return 0;
}
if (0 != close.compare("exit"))
{
::MessageBox(hWnd, close.c_str(), "Unknown close action in config", MB_OK | MB_ICONWARNING);
return 0;
}
}
}
}
case WM_TRAYICON:
{
switch (lParam)
{
case WM_LBUTTONUP:
case WM_RBUTTONUP:
{
SetForegroundWindow (hWnd);
ShowPopupMenu(hWnd, NULL, -1);
PostMessage (hWnd, WM_APP + 1, 0, 0);
break;
}
}
break;
}
case WM_TIMER:
{
if (wParam == IDT_GRACEFUL_SHUTDOWN_TIMER)
{
PostMessage (hWnd, WM_CLOSE, 0, 0); // exit
return 0;
}
if (wParam == FRAME_UPDATE_TIMER)
{
InvalidateRect(hWnd, NULL, TRUE);
}
break;
}
case WM_PAINT:
{
HDC hDC;
PAINTSTRUCT ps;
RECT rp;
HFONT hFont;
std::stringstream s; PrintMainWindowText (s);
hDC = BeginPaint (hWnd, &ps);
GetClientRect(hWnd, &rp);
SetTextColor(hDC, 0x00D43B69);
hFont = CreateFont(18,0,0,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,TEXT("Times New Roman"));
SelectObject(hDC,hFont);
DrawText(hDC, TEXT(s.str().c_str()), s.str().length(), &rp, DT_CENTER|DT_VCENTER);
DeleteObject(hFont);
EndPaint(hWnd, &ps);
break;
}
}
return DefWindowProc( hWnd, uMsg, wParam, lParam);
}
bool StartWin32App ()
{
if (FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd")))
{
MessageBox(NULL, TEXT("I2Pd is running already"), TEXT("Warning"), MB_OK);
return false;
}
// register main window
auto hInst = GetModuleHandle(NULL);
WNDCLASSEX wclx;
memset (&wclx, 0, sizeof(wclx));
wclx.cbSize = sizeof(wclx);
wclx.style = 0;
wclx.lpfnWndProc = WndProc;
//wclx.cbClsExtra = 0;
//wclx.cbWndExtra = 0;
wclx.hInstance = hInst;
wclx.hIcon = LoadIcon (hInst, MAKEINTRESOURCE(MAINICON));
wclx.hCursor = LoadCursor (NULL, IDC_ARROW);
//wclx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wclx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wclx.lpszMenuName = NULL;
wclx.lpszClassName = I2PD_WIN32_CLASSNAME;
RegisterClassEx (&wclx);
// create new window
if (!CreateWindow(I2PD_WIN32_CLASSNAME, TEXT("i2pd"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 100, 100, 350, 210, NULL, NULL, hInst, NULL))
{
MessageBox(NULL, "Failed to create main window", TEXT("Warning!"), MB_ICONERROR | MB_OK | MB_TOPMOST);
return false;
}
return true;
}
int RunWin32App ()
{
MSG msg;
while (GetMessage (&msg, NULL, 0, 0 ))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
void StopWin32App ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_EXIT, 0), 0);
UnregisterClass (I2PD_WIN32_CLASSNAME, GetModuleHandle(NULL));
}
bool GracefulShutdown ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_GRACEFUL_SHUTDOWN, 0), 0);
return hWnd;
}
bool StopGracefulShutdown ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_STOP_GRACEFUL_SHUTDOWN, 0), 0);
return hWnd;
}
}
}
/*
* Copyright (c) 2013-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <shellapi.h>
#include "ClientContext.h"
#include "Config.h"
#include "NetDb.hpp"
#include "RouterContext.h"
#include "Transports.h"
#include "Tunnel.h"
#include "version.h"
#include "resource.h"
#include "Daemon.h"
#include "Win32App.h"
#include "Win32NetState.h"
#define ID_ABOUT 2000
#define ID_EXIT 2001
#define ID_CONSOLE 2002
#define ID_APP 2003
#define ID_GRACEFUL_SHUTDOWN 2004
#define ID_STOP_GRACEFUL_SHUTDOWN 2005
#define ID_RELOAD 2006
#define ID_ACCEPT_TRANSIT 2007
#define ID_DECLINE_TRANSIT 2008
#define ID_DATADIR 2009
#define ID_TRAY_ICON 2050
#define WM_TRAYICON (WM_USER + 1)
#define IDT_GRACEFUL_SHUTDOWN_TIMER 2100
#define FRAME_UPDATE_TIMER 2101
#define IDT_GRACEFUL_TUNNELCHECK_TIMER 2102
namespace i2p
{
namespace win32
{
DWORD g_GracefulShutdownEndtime = 0;
bool g_isWinService;
static void ShowPopupMenu (HWND hWnd, POINT *curpos, int wDefaultItem)
{
HMENU hPopup = CreatePopupMenu();
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_CONSOLE, "Open &console");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_DATADIR, "Open &datadir");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_APP, "&Show app");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_ABOUT, "&About...");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
if(!i2p::context.AcceptsTunnels())
InsertMenu (hPopup, -1,
i2p::util::DaemonWin32::Instance ().isGraceful ? MF_BYPOSITION | MF_STRING | MF_GRAYED : MF_BYPOSITION | MF_STRING,
ID_ACCEPT_TRANSIT, "Accept &transit");
else
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_DECLINE_TRANSIT, "Decline &transit");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_RELOAD, "&Reload tunnels config");
if (!i2p::util::DaemonWin32::Instance ().isGraceful)
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_GRACEFUL_SHUTDOWN, "&Graceful shutdown");
else
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_STOP_GRACEFUL_SHUTDOWN, "Stop &graceful shutdown");
InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_EXIT, "E&xit");
SetMenuDefaultItem (hPopup, ID_CONSOLE, FALSE);
SendMessage (hWnd, WM_INITMENUPOPUP, (WPARAM)hPopup, 0);
POINT p;
if (!curpos)
{
GetCursorPos (&p);
curpos = &p;
}
WORD cmd = TrackPopupMenu (hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_NONOTIFY, curpos->x, curpos->y, 0, hWnd, NULL);
SendMessage (hWnd, WM_COMMAND, cmd, 0);
DestroyMenu(hPopup);
}
static void AddTrayIcon (HWND hWnd, bool notify = false)
{
NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uID = ID_TRAY_ICON;
nid.uFlags = notify ? NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO : NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO;
nid.uCallbackMessage = WM_TRAYICON;
nid.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE (MAINICON));
strcpy (nid.szTip, "i2pd");
if (notify) strcpy (nid.szInfo, "i2pd is starting");
Shell_NotifyIcon(NIM_ADD, &nid );
}
static void RemoveTrayIcon (HWND hWnd)
{
NOTIFYICONDATA nid;
nid.hWnd = hWnd;
nid.uID = ID_TRAY_ICON;
Shell_NotifyIcon (NIM_DELETE, &nid);
}
static void ShowUptime (std::stringstream& s, int seconds)
{
int num;
if ((num = seconds / 86400) > 0) {
s << num << " days, ";
seconds -= num * 86400;
}
if ((num = seconds / 3600) > 0) {
s << num << " hours, ";
seconds -= num * 3600;
}
if ((num = seconds / 60) > 0) {
s << num << " min, ";
seconds -= num * 60;
}
s << seconds << " seconds\n";
}
template <typename size> static void ShowTransfered (std::stringstream& s, size transfer)
{
auto bytes = transfer & 0x03ff;
transfer >>= 10;
auto kbytes = transfer & 0x03ff;
transfer >>= 10;
auto mbytes = transfer & 0x03ff;
transfer >>= 10;
auto gbytes = transfer;
if (gbytes)
s << gbytes << " GB, ";
if (mbytes)
s << mbytes << " MB, ";
if (kbytes)
s << kbytes << " KB, ";
s << bytes << " Bytes\n";
}
static void ShowNetworkStatus (std::stringstream& s, RouterStatus status, bool testing, RouterError error)
{
switch (status)
{
case eRouterStatusOK: s << "OK"; break;
case eRouterStatusFirewalled: s << "FW"; break;
case eRouterStatusUnknown: s << "Unk"; break;
case eRouterStatusProxy: s << "Proxy"; break;
case eRouterStatusMesh: s << "Mesh"; break;
default: s << "Unk";
};
if (testing)
s << " (Test)";
if (error != eRouterErrorNone)
{
switch (error)
{
case eRouterErrorClockSkew:
s << " - " << tr("Clock skew");
break;
case eRouterErrorOffline:
s << " - " << tr("Offline");
break;
case eRouterErrorSymmetricNAT:
s << " - " << tr("Symmetric NAT");
break;
case eRouterErrorFullConeNAT:
s << " - " << tr("Full cone NAT");
break;
case eRouterErrorNoDescriptors:
s << " - " << tr("No Descriptors");
break;
default: ;
}
}
}
static void PrintMainWindowText (std::stringstream& s)
{
s << "\n";
s << "Status: ";
ShowNetworkStatus (s, i2p::context.GetStatus (), i2p::context.GetTesting(), i2p::context.GetError ());
if (i2p::context.SupportsV6 ())
{
s << " / ";
ShowNetworkStatus (s, i2p::context.GetStatusV6 (), i2p::context.GetTestingV6(), i2p::context.GetErrorV6 ());
}
s << "; ";
s << "Success Rate: " << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate() << "%\n";
s << "Uptime: "; ShowUptime(s, i2p::context.GetUptime ());
if (g_GracefulShutdownEndtime != 0)
{
DWORD GracefulTimeLeft = (g_GracefulShutdownEndtime - GetTickCount()) / 1000;
s << "Graceful shutdown, time left: "; ShowUptime(s, GracefulTimeLeft);
}
else
s << "\n";
s << "Inbound: " << i2p::transport::transports.GetInBandwidth() / 1024 << " KiB/s; ";
s << "Outbound: " << i2p::transport::transports.GetOutBandwidth() / 1024 << " KiB/s\n";
s << "Received: "; ShowTransfered (s, i2p::transport::transports.GetTotalReceivedBytes());
s << "Sent: "; ShowTransfered (s, i2p::transport::transports.GetTotalSentBytes());
s << "\n";
s << "Routers: " << i2p::data::netdb.GetNumRouters () << "; ";
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << "; ";
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "\n";
s << "Tunnels: ";
s << "In: " << i2p::tunnel::tunnels.CountInboundTunnels() << "; ";
s << "Out: " << i2p::tunnel::tunnels.CountOutboundTunnels() << "; ";
s << "Transit: " << i2p::tunnel::tunnels.CountTransitTunnels() << "\n";
s << "\n";
}
static LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static UINT s_uTaskbarRestart;
switch (uMsg)
{
case WM_CREATE:
{
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
AddTrayIcon (hWnd, true);
break;
}
case WM_CLOSE:
{
RemoveTrayIcon (hWnd);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
KillTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER);
KillTimer (hWnd, IDT_GRACEFUL_TUNNELCHECK_TIMER);
PostQuitMessage (0);
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ID_ABOUT:
{
std::stringstream text;
text << "Version: " << I2PD_VERSION << " " << CODENAME;
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_EXIT:
{
PostMessage (hWnd, WM_CLOSE, 0, 0);
return 0;
}
case ID_ACCEPT_TRANSIT:
{
i2p::context.SetAcceptsTunnels (true);
std::stringstream text;
text << "I2Pd now accept transit tunnels";
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_DECLINE_TRANSIT:
{
i2p::context.SetAcceptsTunnels (false);
std::stringstream text;
text << "I2Pd now decline new transit tunnels";
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_GRACEFUL_SHUTDOWN:
{
i2p::context.SetAcceptsTunnels (false);
SetTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER, 10*60*1000, nullptr); // 10 minutes
SetTimer (hWnd, IDT_GRACEFUL_TUNNELCHECK_TIMER, 1000, nullptr); // check tunnels every second
g_GracefulShutdownEndtime = GetTickCount() + 10*60*1000;
i2p::util::DaemonWin32::Instance ().isGraceful = true;
return 0;
}
case ID_STOP_GRACEFUL_SHUTDOWN:
{
i2p::context.SetAcceptsTunnels (true);
KillTimer (hWnd, IDT_GRACEFUL_SHUTDOWN_TIMER);
KillTimer (hWnd, IDT_GRACEFUL_TUNNELCHECK_TIMER);
g_GracefulShutdownEndtime = 0;
i2p::util::DaemonWin32::Instance ().isGraceful = false;
return 0;
}
case ID_RELOAD:
{
i2p::client::context.ReloadConfig();
std::stringstream text;
text << "I2Pd reloading configs...";
MessageBox( hWnd, TEXT(text.str ().c_str ()), TEXT("i2pd"), MB_ICONINFORMATION | MB_OK );
return 0;
}
case ID_CONSOLE:
{
char buf[30];
std::string httpAddr; i2p::config::GetOption("http.address", httpAddr);
uint16_t httpPort; i2p::config::GetOption("http.port", httpPort);
snprintf(buf, 30, "http://%s:%d", httpAddr.c_str(), httpPort);
ShellExecute(NULL, "open", buf, NULL, NULL, SW_SHOWNORMAL);
return 0;
}
case ID_APP:
{
ShowWindow(hWnd, SW_SHOW);
SetTimer(hWnd, FRAME_UPDATE_TIMER, 3000, NULL);
return 0;
}
case ID_DATADIR:
{
std::string datadir(i2p::fs::GetUTF8DataDir());
ShellExecute(NULL, "explore", datadir.c_str(), NULL, NULL, SW_SHOWNORMAL);
return 0;
}
}
break;
}
case WM_SYSCOMMAND:
{
switch (wParam)
{
case SC_MINIMIZE:
{
ShowWindow(hWnd, SW_HIDE);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
return 0;
}
case SC_CLOSE:
{
std::string close; i2p::config::GetOption("close", close);
if (0 == close.compare("ask"))
switch(::MessageBox(hWnd, "Would you like to minimize instead of exiting?"
" You can add 'close' configuration option. Valid values are: ask, minimize, exit.",
"Minimize instead of exiting?", MB_ICONQUESTION | MB_YESNOCANCEL | MB_DEFBUTTON1))
{
case IDYES: close = "minimize"; break;
case IDNO: close = "exit"; break;
default: return 0;
}
if (0 == close.compare("minimize"))
{
ShowWindow(hWnd, SW_HIDE);
KillTimer (hWnd, FRAME_UPDATE_TIMER);
return 0;
}
if (0 != close.compare("exit"))
{
::MessageBox(hWnd, close.c_str(), "Unknown close action in config", MB_OK | MB_ICONWARNING);
return 0;
}
}
}
#if (__cplusplus >= 201703L) // C++ 17 or higher
[[fallthrough]];
#endif
}
case WM_TRAYICON:
{
switch (lParam)
{
case WM_LBUTTONUP:
case WM_RBUTTONUP:
{
SetForegroundWindow (hWnd);
ShowPopupMenu(hWnd, NULL, -1);
PostMessage (hWnd, WM_APP + 1, 0, 0);
break;
}
}
break;
}
case WM_TIMER:
{
switch(wParam)
{
case IDT_GRACEFUL_SHUTDOWN_TIMER:
{
g_GracefulShutdownEndtime = 0;
PostMessage (hWnd, WM_CLOSE, 0, 0); // exit
return 0;
}
case IDT_GRACEFUL_TUNNELCHECK_TIMER:
{
if (i2p::tunnel::tunnels.CountTransitTunnels() == 0)
PostMessage (hWnd, WM_CLOSE, 0, 0);
else
SetTimer (hWnd, IDT_GRACEFUL_TUNNELCHECK_TIMER, 1000, nullptr);
return 0;
}
case FRAME_UPDATE_TIMER:
{
InvalidateRect(hWnd, NULL, TRUE);
return 0;
}
}
break;
}
case WM_PAINT:
{
HDC hDC;
PAINTSTRUCT ps;
RECT rp;
HFONT hFont;
std::stringstream s; PrintMainWindowText (s);
hDC = BeginPaint (hWnd, &ps);
GetClientRect(hWnd, &rp);
SetTextColor(hDC, 0x00D43B69);
hFont = CreateFont(18,0,0,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,TEXT("Times New Roman"));
SelectObject(hDC,hFont);
DrawText(hDC, TEXT(s.str().c_str()), s.str().length(), &rp, DT_CENTER|DT_VCENTER);
DeleteObject(hFont);
EndPaint(hWnd, &ps);
break;
}
default:
{
if (uMsg == s_uTaskbarRestart)
AddTrayIcon (hWnd, false);
break;
}
}
return DefWindowProc( hWnd, uMsg, wParam, lParam);
}
bool StartWin32App (bool isWinService)
{
g_isWinService = isWinService;
if (FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd")))
{
MessageBox(NULL, TEXT("I2Pd is running already"), TEXT("Warning"), MB_OK);
return false;
}
// register main window
auto hInst = GetModuleHandle(NULL);
WNDCLASSEX wclx;
memset (&wclx, 0, sizeof(wclx));
wclx.cbSize = sizeof(wclx);
wclx.style = 0;
wclx.lpfnWndProc = WndProc;
//wclx.cbClsExtra = 0;
//wclx.cbWndExtra = 0;
wclx.hInstance = hInst;
wclx.hIcon = LoadIcon (hInst, MAKEINTRESOURCE(MAINICON));
wclx.hCursor = LoadCursor (NULL, IDC_ARROW);
//wclx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wclx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wclx.lpszMenuName = NULL;
wclx.lpszClassName = I2PD_WIN32_CLASSNAME;
RegisterClassEx (&wclx);
// create new window
if (!CreateWindow(I2PD_WIN32_CLASSNAME, TEXT("i2pd"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 100, 100, 350, 210, NULL, NULL, hInst, NULL))
{
MessageBox(NULL, "Failed to create main window", TEXT("Warning!"), MB_ICONERROR | MB_OK | MB_TOPMOST);
return false;
}
// COM requires message loop to work, which is not implemented in service mode
if (!g_isWinService)
SubscribeToEvents();
return true;
}
int RunWin32App ()
{
MSG msg;
while (GetMessage (&msg, NULL, 0, 0 ))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
void StopWin32App ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_EXIT, 0), 0);
else if(!g_isWinService)
UnSubscribeFromEvents();
UnregisterClass (I2PD_WIN32_CLASSNAME, GetModuleHandle(NULL));
}
bool GracefulShutdown ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_GRACEFUL_SHUTDOWN, 0), 0);
return hWnd;
}
bool StopGracefulShutdown ()
{
HWND hWnd = FindWindow (I2PD_WIN32_CLASSNAME, TEXT("i2pd"));
if (hWnd)
PostMessage (hWnd, WM_COMMAND, MAKEWPARAM(ID_STOP_GRACEFUL_SHUTDOWN, 0), 0);
return hWnd;
}
}
}

@ -1,17 +1,27 @@
#ifndef WIN32APP_H__
#define WIN32APP_H__
#define I2PD_WIN32_CLASSNAME "i2pd main window"
namespace i2p
{
namespace win32
{
bool StartWin32App ();
void StopWin32App ();
int RunWin32App ();
bool GracefulShutdown ();
bool StopGracefulShutdown ();
}
}
#endif // WIN32APP_H__
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#ifndef WIN32APP_H__
#define WIN32APP_H__
#define I2PD_WIN32_CLASSNAME "i2pd main window"
namespace i2p
{
namespace win32
{
extern DWORD g_GracefulShutdownEndtime;
bool StartWin32App (bool isWinService);
void StopWin32App ();
int RunWin32App ();
bool GracefulShutdown ();
bool StopGracefulShutdown ();
}
}
#endif // WIN32APP_H__

@ -0,0 +1,103 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#if WINVER != 0x0501 // supported since Vista
#include "Win32NetState.h"
#include <windows.h>
#include "Log.h"
IUnknown *pUnknown = nullptr;
INetworkListManager *pNetworkListManager = nullptr;
IConnectionPointContainer *pCPContainer = nullptr;
IConnectionPoint *pConnectPoint = nullptr;
CNetworkListManagerEvent *pNetEvent = nullptr;
DWORD Cookie = 0;
void SubscribeToEvents()
{
LogPrint(eLogInfo, "NetState: Trying to subscribe to NetworkListManagerEvents");
CoInitialize(NULL);
HRESULT Result = CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_IUnknown, (void **)&pUnknown);
if (SUCCEEDED(Result))
{
Result = pUnknown->QueryInterface(IID_INetworkListManager, (void **)&pNetworkListManager);
if (SUCCEEDED(Result))
{
VARIANT_BOOL IsConnect = VARIANT_FALSE;
#if defined(_MSC_VER)
Result = pNetworkListManager->get_IsConnectedToInternet(&IsConnect);
#else
Result = pNetworkListManager->IsConnectedToInternet(&IsConnect);
#endif
if (SUCCEEDED(Result)) {
i2p::transport::transports.SetOnline (true);
LogPrint(eLogInfo, "NetState: Current state: ", IsConnect == VARIANT_TRUE ? "connected" : "disconnected");
}
Result = pNetworkListManager->QueryInterface(IID_IConnectionPointContainer, (void **)&pCPContainer);
if (SUCCEEDED(Result))
{
Result = pCPContainer->FindConnectionPoint(IID_INetworkListManagerEvents, &pConnectPoint);
if(SUCCEEDED(Result))
{
pNetEvent = new CNetworkListManagerEvent;
Result = pConnectPoint->Advise((IUnknown *)pNetEvent, &Cookie);
if (SUCCEEDED(Result))
LogPrint(eLogInfo, "NetState: Successfully subscribed to NetworkListManagerEvent messages");
else
LogPrint(eLogError, "NetState: Unable to subscribe to NetworkListManagerEvent messages");
} else
LogPrint(eLogError, "NetState: Unable to find interface connection point");
} else
LogPrint(eLogError, "NetState: Unable to query NetworkListManager interface");
} else
LogPrint(eLogError, "NetState: Unable to query global interface");
} else
LogPrint(eLogError, "NetState: Unable to create INetworkListManager interface");
}
void UnSubscribeFromEvents()
{
LogPrint(eLogInfo, "NetState: Unsubscribing from NetworkListManagerEvents");
try
{
if (pConnectPoint) {
pConnectPoint->Unadvise(Cookie);
pConnectPoint->Release();
}
if (pNetEvent)
{
pNetEvent->Release();
}
if (pCPContainer)
{
pCPContainer->Release();
}
if (pNetworkListManager)
{
pNetworkListManager->Release();
}
if (pUnknown)
{
pUnknown->Release();
}
CoUninitialize();
}
catch (std::exception& ex)
{
LogPrint (eLogError, "NetState: Received exception: ", ex.what ());
}
}
#endif // WINVER

@ -0,0 +1,92 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#ifndef WIN_32_NETSTATE_H__
#define WIN_32_NETSTATE_H__
#if WINVER != 0x0501 // supported since Vista
#include <netlistmgr.h>
#include <ocidl.h>
#include "Log.h"
#include "Transports.h"
class CNetworkListManagerEvent final : public INetworkListManagerEvents
{
public:
CNetworkListManagerEvent() : m_ref(1) { }
~CNetworkListManagerEvent() { }
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
{
if (IsEqualIID(riid, IID_IUnknown)) {
*ppvObject = (IUnknown *)this;
} else if (IsEqualIID(riid ,IID_INetworkListManagerEvents)) {
*ppvObject = (INetworkListManagerEvents *)this;
} else {
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
ULONG STDMETHODCALLTYPE AddRef()
{
return (ULONG)InterlockedIncrement(&m_ref);
}
ULONG STDMETHODCALLTYPE Release()
{
LONG Result = InterlockedDecrement(&m_ref);
if (Result == 0)
delete this;
return (ULONG)Result;
}
virtual HRESULT STDMETHODCALLTYPE ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
if (newConnectivity == NLM_CONNECTIVITY_DISCONNECTED) {
i2p::transport::transports.SetOnline (false);
LogPrint(eLogInfo, "NetState: disconnected from network");
}
if (((int)newConnectivity & (int)NLM_CONNECTIVITY_IPV4_INTERNET) != 0) {
i2p::transport::transports.SetOnline (true);
LogPrint(eLogInfo, "NetState: connected to internet with IPv4 capability");
}
if (((int)newConnectivity & (int)NLM_CONNECTIVITY_IPV6_INTERNET) != 0) {
i2p::transport::transports.SetOnline (true);
LogPrint(eLogInfo, "NetState: connected to internet with IPv6 capability");
}
if (
(((int)newConnectivity & (int)NLM_CONNECTIVITY_IPV4_INTERNET) == 0) &&
(((int)newConnectivity & (int)NLM_CONNECTIVITY_IPV6_INTERNET) == 0)
) {
i2p::transport::transports.SetOnline (false);
LogPrint(eLogInfo, "NetState: connected without internet access");
}
return S_OK;
}
private:
LONG m_ref;
};
void SubscribeToEvents();
void UnSubscribeFromEvents();
#else // WINVER == 0x0501
void SubscribeToEvents() { }
void UnSubscribeFromEvents() { }
#endif // WINVER
#endif

@ -1,10 +1,13 @@
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS // to use freopen
#endif
/*
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#include "Win32Service.h"
#include <assert.h>
#include <strsafe.h>
#include <windows.h>
#include "Daemon.h"
@ -18,7 +21,7 @@ BOOL I2PService::isService()
HWINSTA hWinStation = GetProcessWindowStation();
if (hWinStation != NULL)
{
USEROBJECTFLAGS uof = { 0 };
USEROBJECTFLAGS uof = { FALSE, FALSE, 0 };
if (GetUserObjectInformation(hWinStation, UOI_FLAGS, &uof, sizeof(USEROBJECTFLAGS), NULL) && ((uof.dwFlags & WSF_VISIBLE) == 0))
{
bIsService = TRUE;
@ -116,24 +119,20 @@ void I2PService::Start(DWORD dwArgc, PSTR *pszArgv)
}
catch (DWORD dwError)
{
LogPrint(eLogError, "Win32Service Start", dwError);
LogPrint(eLogCritical, "Win32Service: Start error: ", dwError);
SetServiceStatus(SERVICE_STOPPED, dwError);
}
catch (...)
{
LogPrint(eLogError, "Win32Service failed to start.", EVENTLOG_ERROR_TYPE);
LogPrint(eLogCritical, "Win32Service: failed to start: ", EVENTLOG_ERROR_TYPE);
SetServiceStatus(SERVICE_STOPPED);
}
}
void I2PService::OnStart(DWORD dwArgc, PSTR *pszArgv)
{
LogPrint(eLogInfo, "Win32Service in OnStart", EVENTLOG_INFORMATION_TYPE);
LogPrint(eLogInfo, "Win32Service: in OnStart (", EVENTLOG_INFORMATION_TYPE, ")");
Daemon.start();
//i2p::util::config::OptionParser(dwArgc, pszArgv);
//i2p::util::filesystem::ReadConfigFile(i2p::util::config::mapArgs, i2p::util::config::mapMultiArgs);
//i2p::context.OverrideNTCPAddress(i2p::util::config::GetCharArg("-host", "127.0.0.1"),
// i2p::util::config::GetArg("-port", 17070));
_worker = new std::thread(std::bind(&I2PService::WorkerThread, this));
}
@ -158,12 +157,12 @@ void I2PService::Stop()
}
catch (DWORD dwError)
{
LogPrint(eLogInfo, "Win32Service Stop", dwError);
LogPrint(eLogInfo, "Win32Service: Stop error: ", dwError);
SetServiceStatus(dwOriginalState);
}
catch (...)
{
LogPrint(eLogError, "Win32Service failed to stop.", EVENTLOG_ERROR_TYPE);
LogPrint(eLogCritical, "Win32Service: Failed to stop: ", EVENTLOG_ERROR_TYPE);
SetServiceStatus(dwOriginalState);
}
}
@ -171,7 +170,7 @@ void I2PService::Stop()
void I2PService::OnStop()
{
// Log a service stop message to the Application log.
LogPrint(eLogInfo, "Win32Service in OnStop", EVENTLOG_INFORMATION_TYPE);
LogPrint(eLogInfo, "Win32Service: in OnStop (", EVENTLOG_INFORMATION_TYPE, ")");
Daemon.stop();
m_fStopping = TRUE;
if (WaitForSingleObject(m_hStoppedEvent, INFINITE) != WAIT_OBJECT_0)
@ -192,12 +191,12 @@ void I2PService::Pause()
}
catch (DWORD dwError)
{
LogPrint(eLogError, "Win32Service Pause", dwError);
LogPrint(eLogCritical, "Win32Service: Pause error: ", dwError);
SetServiceStatus(SERVICE_RUNNING);
}
catch (...)
{
LogPrint(eLogError, "Win32Service failed to pause.", EVENTLOG_ERROR_TYPE);
LogPrint(eLogCritical, "Win32Service: Failed to pause: ", EVENTLOG_ERROR_TYPE);
SetServiceStatus(SERVICE_RUNNING);
}
}
@ -216,12 +215,12 @@ void I2PService::Continue()
}
catch (DWORD dwError)
{
LogPrint(eLogError, "Win32Service Continue", dwError);
LogPrint(eLogCritical, "Win32Service: Continue error: ", dwError);
SetServiceStatus(SERVICE_PAUSED);
}
catch (...)
{
LogPrint(eLogError, "Win32Service failed to resume.", EVENTLOG_ERROR_TYPE);
LogPrint(eLogCritical, "Win32Service: Failed to resume: ", EVENTLOG_ERROR_TYPE);
SetServiceStatus(SERVICE_PAUSED);
}
}
@ -239,11 +238,11 @@ void I2PService::Shutdown()
}
catch (DWORD dwError)
{
LogPrint(eLogError, "Win32Service Shutdown", dwError);
LogPrint(eLogCritical, "Win32Service: Shutdown error: ", dwError);
}
catch (...)
{
LogPrint(eLogError, "Win32Service failed to shut down.", EVENTLOG_ERROR_TYPE);
LogPrint(eLogCritical, "Win32Service: Failed to shut down: ", EVENTLOG_ERROR_TYPE);
}
}
@ -282,124 +281,3 @@ void FreeHandles(SC_HANDLE schSCManager, SC_HANDLE schService)
schService = NULL;
}
}
void InstallService(PCSTR pszServiceName, PCSTR pszDisplayName, DWORD dwStartType, PCSTR pszDependencies, PCSTR pszAccount, PCSTR pszPassword)
{
printf("Try to install Win32Service (%s).\n", pszServiceName);
char szPath[MAX_PATH];
SC_HANDLE schSCManager = NULL;
SC_HANDLE schService = NULL;
if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)) == 0)
{
printf("GetModuleFileName failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
strncat(szPath, " --daemon", MAX_PATH);
// Open the local default service control manager database
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE);
if (schSCManager == NULL)
{
printf("OpenSCManager failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
// Install the service into SCM by calling CreateService
schService = CreateService(
schSCManager, // SCManager database
pszServiceName, // Name of service
pszDisplayName, // Name to display
SERVICE_QUERY_STATUS, // Desired access
SERVICE_WIN32_OWN_PROCESS, // Service type
dwStartType, // Service start type
SERVICE_ERROR_NORMAL, // Error control type
szPath, // Service's binary
NULL, // No load ordering group
NULL, // No tag identifier
pszDependencies, // Dependencies
pszAccount, // Service running account
pszPassword // Password of the account
);
if (schService == NULL)
{
printf("CreateService failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
printf("Win32Service is installed as %s.\n", pszServiceName);
// Centralized cleanup for all allocated resources.
FreeHandles(schSCManager, schService);
}
void UninstallService(PCSTR pszServiceName)
{
printf("Try to uninstall Win32Service (%s).\n", pszServiceName);
SC_HANDLE schSCManager = NULL;
SC_HANDLE schService = NULL;
SERVICE_STATUS ssSvcStatus = {};
// Open the local default service control manager database
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (schSCManager == NULL)
{
printf("OpenSCManager failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
// Open the service with delete, stop, and query status permissions
schService = OpenService(schSCManager, pszServiceName, SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);
if (schService == NULL)
{
printf("OpenService failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
// Try to stop the service
if (ControlService(schService, SERVICE_CONTROL_STOP, &ssSvcStatus))
{
printf("Stopping %s.\n", pszServiceName);
Sleep(1000);
while (QueryServiceStatus(schService, &ssSvcStatus))
{
if (ssSvcStatus.dwCurrentState == SERVICE_STOP_PENDING)
{
printf(".");
Sleep(1000);
}
else break;
}
if (ssSvcStatus.dwCurrentState == SERVICE_STOPPED)
{
printf("\n%s is stopped.\n", pszServiceName);
}
else
{
printf("\n%s failed to stop.\n", pszServiceName);
}
}
// Now remove the service by calling DeleteService.
if (!DeleteService(schService))
{
printf("DeleteService failed w/err 0x%08lx\n", GetLastError());
FreeHandles(schSCManager, schService);
return;
}
printf("%s is removed.\n", pszServiceName);
// Centralized cleanup for all allocated resources.
FreeHandles(schSCManager, schService);
}

@ -1,84 +1,63 @@
/*
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
* See full license text in LICENSE file at top of project tree
*/
#ifndef WIN_32_SERVICE_H__
#define WIN_32_SERVICE_H__
#include <thread>
#include <windows.h>
#ifdef _WIN32
// Internal name of the service
#define SERVICE_NAME "i2pdService"
// Displayed name of the service
#define SERVICE_DISPLAY_NAME "i2pd router service"
// Service start options.
#define SERVICE_START_TYPE SERVICE_DEMAND_START
// List of service dependencies - "dep1\0dep2\0\0"
#define SERVICE_DEPENDENCIES ""
// The name of the account under which the service should run
#define SERVICE_ACCOUNT "NT AUTHORITY\\LocalService"
// The password to the service account name
#define SERVICE_PASSWORD NULL
#endif
#define SERVICE_NAME "i2pdService"
class I2PService
{
public:
I2PService(PSTR pszServiceName,
BOOL fCanStop = TRUE,
BOOL fCanShutdown = TRUE,
BOOL fCanPauseContinue = FALSE);
virtual ~I2PService(void);
static BOOL isService();
static BOOL Run(I2PService &service);
void Stop();
protected:
virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
virtual void OnStop();
virtual void OnPause();
virtual void OnContinue();
virtual void OnShutdown();
void SetServiceStatus(DWORD dwCurrentState,
DWORD dwWin32ExitCode = NO_ERROR,
DWORD dwWaitHint = 0);
private:
static void WINAPI ServiceMain(DWORD dwArgc, LPSTR *lpszArgv);
static void WINAPI ServiceCtrlHandler(DWORD dwCtrl);
void WorkerThread();
void Start(DWORD dwArgc, PSTR *pszArgv);
void Pause();
void Continue();
void Shutdown();
static I2PService* s_service;
PSTR m_name;
SERVICE_STATUS m_status;
SERVICE_STATUS_HANDLE m_statusHandle;
BOOL m_fStopping;
HANDLE m_hStoppedEvent;
std::thread* _worker;
public:
I2PService(PSTR pszServiceName,
BOOL fCanStop = TRUE,
BOOL fCanShutdown = TRUE,
BOOL fCanPauseContinue = FALSE);
virtual ~I2PService(void);
static BOOL isService();
static BOOL Run(I2PService &service);
void Stop();
protected:
virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
virtual void OnStop();
virtual void OnPause();
virtual void OnContinue();
virtual void OnShutdown();
void SetServiceStatus(DWORD dwCurrentState,
DWORD dwWin32ExitCode = NO_ERROR,
DWORD dwWaitHint = 0);
private:
static void WINAPI ServiceMain(DWORD dwArgc, LPSTR *lpszArgv);
static void WINAPI ServiceCtrlHandler(DWORD dwCtrl);
void WorkerThread();
void Start(DWORD dwArgc, PSTR *pszArgv);
void Pause();
void Continue();
void Shutdown();
static I2PService* s_service;
PSTR m_name;
SERVICE_STATUS m_status;
SERVICE_STATUS_HANDLE m_statusHandle;
BOOL m_fStopping;
HANDLE m_hStoppedEvent;
std::thread* _worker;
};
void InstallService(
PCSTR pszServiceName,
PCSTR pszDisplayName,
DWORD dwStartType,
PCSTR pszDependencies,
PCSTR pszAccount,
PCSTR pszPassword
);
void UninstallService(PCSTR pszServiceName);
#endif // WIN_32_SERVICE_H__
#endif // WIN_32_SERVICE_H__

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

@ -1,11 +1,11 @@
//{{NO_DEPENDENCIES}}
#define MAINICON 101
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
//{{NO_DEPENDENCIES}}
#define MAINICON 101
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

18
android/.gitignore vendored

@ -1,18 +0,0 @@
gen
tests
bin
libs
log*
obj
.gradle
.idea
.externalNativeBuild
ant.properties
local.properties
build.sh
android.iml
build
gradle
gradlew
gradlew.bat

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.purplei2p.i2pd"
android:installLocation="auto"
android:versionCode="1"
android:versionName="2.21.0">
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <!-- normal perm, per https://developer.android.com/guide/topics/permissions/normal-permissions.html -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- normal perm -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- required in API 26+ -->
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
>
<receiver android:name=".NetworkStateChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<activity
android:name=".I2PDPermsAskerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".I2PDActivity"
android:label="@string/app_name" />
<service
android:name=".ForegroundService"
android:enabled="true" />
<activity
android:name=".I2PDPermsExplanationActivity"
android:label="@string/title_activity_i2_pdperms_asker_prompt"
android:parentActivityName=".I2PDPermsAskerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.purplei2p.i2pd.I2PDPermsAskerActivity" />
</activity>
</application>
</manifest>

@ -1 +0,0 @@
../../contrib/certificates

@ -1,81 +0,0 @@
## Configuration file for a typical i2pd user
## See https://i2pd.readthedocs.io/en/latest/user-guide/configuration/
## for more options you can use in this file.
#logfile = /sdcard/i2pd/i2pd.log
loglevel = none
# host = 1.2.3.4
# port = 4567
ipv4 = true
ipv6 = false
# ntcp = true
# ntcpproxy = http://127.0.0.1:8118
# ssu = true
bandwidth = L
# share = 100
# notransit = true
# floodfill = true
[ntcp2]
enabled = true
[http]
enabled = true
address = 127.0.0.1
port = 7070
# auth = true
# user = i2pd
# pass = changeme
[httpproxy]
enabled = true
address = 127.0.0.1
port = 4444
# keys = http-proxy-keys.dat
# addresshelper = true
# outproxy = http://false.i2p
## httpproxy section also accepts I2CP parameters, like "inbound.length" etc.
[socksproxy]
enabled = true
address = 127.0.0.1
port = 4447
# keys = socks-proxy-keys.dat
# outproxy.enabled = false
# outproxy = 127.0.0.1
# outproxyport = 9050
## socksproxy section also accepts I2CP parameters, like "inbound.length" etc.
[sam]
enabled = false
# address = 127.0.0.1
# port = 7656
[precomputation]
elgamal = true
[upnp]
enabled = true
# name = I2Pd
[reseed]
verify = true
## Path to local reseed data file (.su3) for manual reseeding
# file = /path/to/i2pseeds.su3
## or HTTPS URL to reseed from
# file = https://legit-website.com/i2pseeds.su3
## Path to local ZIP file or HTTPS URL to reseed from
# zipfile = /path/to/netDb.zip
## If you run i2pd behind a proxy server, set proxy server for reseeding here
## Should be http://address:port or socks://address:port
# proxy = http://127.0.0.1:8118
## Minimum number of known routers, below which i2pd triggers reseeding. 25 by default
# threshold = 25
[limits]
transittunnels = 50

@ -1,3 +0,0 @@
http://inr.i2p/export/alive-hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt

@ -1,33 +0,0 @@
[IRC-IRC2P]
#type = client
#address = 127.0.0.1
#port = 6668
#destination = irc.postman.i2p
#destinationport = 6667
#keys = irc-keys.dat
#[IRC-ILITA]
#type = client
#address = 127.0.0.1
#port = 6669
#destination = irc.ilita.i2p
#destinationport = 6667
#keys = irc-keys.dat
#[SMTP]
#type = client
#address = 127.0.0.1
#port = 7659
#destination = smtp.postman.i2p
#destinationport = 25
#keys = smtp-keys.dat
#[POP3]
#type = client
#address = 127.0.0.1
#port = 7660
#destination = pop.postman.i2p
#destinationport = 110
#keys = pop3-keys.dat
# see more examples at https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/

@ -1,74 +0,0 @@
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}
apply plugin: 'com.android.application'
repositories {
jcenter()
maven {
url 'https://maven.google.com'
}
}
dependencies {
compile 'com.android.support:support-compat:28.0.0'
}
android {
compileSdkVersion 28
buildToolsVersion "28.0.1"
defaultConfig {
applicationId "org.purplei2p.i2pd"
targetSdkVersion 28
minSdkVersion 14
versionCode 1
versionName "2.21.0"
ndk {
abiFilters 'armeabi-v7a'
abiFilters 'x86'
}
externalNativeBuild {
ndkBuild {
arguments "-j4"
}
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
assets.srcDirs = ['assets']
}
}
signingConfigs {
orignal {
storeFile file("i2pdapk.jks")
storePassword "android"
keyAlias "i2pdapk"
keyPassword "android"
}
}
buildTypes {
release {
minifyEnabled true
signingConfig signingConfigs.orignal
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
externalNativeBuild {
ndkBuild {
path './jni/Android.mk'
}
}
}

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="i2pd" default="help">
<!-- The local.properties file is created and updated by the 'android' tool.
It contains the path to the SDK. It should *NOT* be checked into
Version Control Systems. -->
<property file="local.properties" />
<!-- The ant.properties file can be created by you. It is only edited by the
'android' tool to add properties to it.
This is the place to change some Ant specific build properties.
Here are some properties you may want to change/update:
source.dir
The name of the source directory. Default is 'src'.
out.dir
The name of the output directory. Default is 'bin'.
For other overridable properties, look at the beginning of the rules
files in the SDK, at tools/ant/build.xml
Properties related to the SDK location or the project target should
be updated using the 'android' tool with the 'update' action.
This file is an integral part of the build system for your
application and should be checked into Version Control Systems.
-->
<property file="ant.properties" />
<!-- if sdk.dir was not set from one of the property file, then
get it from the ANDROID_HOME env var.
This must be done before we load project.properties since
the proguard config can use sdk.dir -->
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition>
<!-- The project.properties file is created and updated by the 'android'
tool, as well as ADT.
This contains project specific properties such as project target, and library
dependencies. Lower level build properties are stored in ant.properties
(or in .classpath for Eclipse projects).
This file is an integral part of the build system for your
application and should be checked into Version Control Systems. -->
<loadproperties srcFile="project.properties" />
<!-- quick check on sdk.dir -->
<fail
message="sdk.dir is missing. Insert sdk.dir=... into './local.properties'. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir"
/>
<fail
message="ndk.dir is missing. Insert ndk.dir=... into './local.properties'."
unless="ndk.dir"
/>
<!--
Import per project custom build rules if present at the root of the project.
This is the place to put custom intermediary targets such as:
-pre-build
-pre-compile
-post-compile (This is typically used for code obfuscation.
Compiled code location: ${out.classes.absolute.dir}
If this is not done in place, override ${out.dex.input.absolute.dir})
-post-package
-post-build
-pre-clean
-->
<import file="custom_rules.xml" optional="true" />
<!-- Import the actual build file.
To customize existing targets, there are two options:
- Customize only one target:
- copy/paste the target into this file, *before* the
<import> task.
- customize it to your needs.
- Customize the whole content of build.xml
- copy/paste the content of the rules files (minus the top node)
into this file, replacing the <import> task.
- customize to your needs.
***********************
****** IMPORTANT ******
***********************
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
in order to avoid having your file be overridden by tools such as "android update project"
-->
<!-- version-tag: 1 -->
<import file="${sdk.dir}/tools/ant/build.xml" />
</project>

@ -1 +0,0 @@
org.gradle.parallel=true

@ -1,73 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
boost_filesystem \
boost_program_options \
crypto ssl \
miniupnpc
LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := DaemonAndroid.cpp i2pd_android.cpp $(IFADDRS_PATH)/ifaddrs.c \
$(wildcard $(LIB_SRC_PATH)/*.cpp)\
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp)\
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc-2.1/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc-2.1/include
include $(PREBUILT_STATIC_LIBRARY)

@ -1,41 +0,0 @@
#APP_ABI := all
APP_ABI := armeabi-v7a x86
#APP_ABI := x86
#APP_ABI := x86_64
#APP_ABI := armeabi-v7a
#can be android-3 but will fail for x86 since arch-x86 is not present at ndkroot/platforms/android-3/ . libz is taken from there.
APP_PLATFORM := android-14
# http://stackoverflow.com/a/21386866/529442 http://stackoverflow.com/a/15616255/529442 to enable c++11 support in Eclipse
NDK_TOOLCHAIN_VERSION := 4.9
# APP_STL := stlport_shared --> does not seem to contain C++11 features
APP_STL := gnustl_shared
# Enable c++11 extensions in source code
APP_CPPFLAGS += -std=c++11
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
# Forcing debug optimization. Use `ndk-build NDK_DEBUG=1` instead.
#APP_OPTIM := debug
# git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/android-ifaddrs.git
# change to your own
I2PD_LIBS_PATH = /path/to/libraries
BOOST_PATH = $(I2PD_LIBS_PATH)/Boost-for-Android-Prebuilt
OPENSSL_PATH = $(I2PD_LIBS_PATH)/OpenSSL-for-Android-Prebuilt
MINIUPNP_PATH = $(I2PD_LIBS_PATH)/MiniUPnP-for-Android-Prebuilt
IFADDRS_PATH = $(I2PD_LIBS_PATH)/android-ifaddrs
# don't change me
I2PD_SRC_PATH = $(PWD)/..
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon

@ -1,207 +0,0 @@
#include <iostream>
#include <chrono>
#include <thread>
#include <exception>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception_ptr.hpp>
//#include "mainwindow.h"
#include "FS.h"
#include "DaemonAndroid.h"
#include "Daemon.h"
namespace i2p
{
namespace android
{
/* Worker::Worker (DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
}
void Worker::startDaemon()
{
Log.d(TAG"Performing daemon start...");
m_Daemon.start();
Log.d(TAG"Daemon started.");
emit resultReady();
}
void Worker::restartDaemon()
{
Log.d(TAG"Performing daemon restart...");
m_Daemon.restart();
Log.d(TAG"Daemon restarted.");
emit resultReady();
}
void Worker::stopDaemon() {
Log.d(TAG"Performing daemon stop...");
m_Daemon.stop();
Log.d(TAG"Daemon stopped.");
emit resultReady();
}
Controller::Controller(DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
Worker *worker = new Worker (m_Daemon);
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::startDaemon, worker, &Worker::startDaemon);
connect(this, &Controller::stopDaemon, worker, &Worker::stopDaemon);
connect(this, &Controller::restartDaemon, worker, &Worker::restartDaemon);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
Controller::~Controller()
{
Log.d(TAG"Closing and waiting for daemon worker thread...");
workerThread.quit();
workerThread.wait();
Log.d(TAG"Waiting for daemon worker thread finished.");
if(m_Daemon.isRunning())
{
Log.d(TAG"Stopping the daemon...");
m_Daemon.stop();
Log.d(TAG"Stopped the daemon.");
}
}
*/
DaemonAndroidImpl::DaemonAndroidImpl ()
//:
/*mutex(nullptr), */
//m_IsRunning(false),
//m_RunningChangedCallback(nullptr)
{
}
DaemonAndroidImpl::~DaemonAndroidImpl ()
{
//delete mutex;
}
bool DaemonAndroidImpl::init(int argc, char* argv[])
{
//mutex=new QMutex(QMutex::Recursive);
//setRunningCallback(0);
//m_IsRunning=false;
// make sure assets are ready before proceed
i2p::fs::DetectDataDir("", false);
int numAttempts = 0;
do
{
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
while (numAttempts <= 10); // 10 seconds max
return Daemon.init(argc,argv);
}
void DaemonAndroidImpl::start()
{
//QMutexLocker locker(mutex);
//setRunning(true);
Daemon.start();
}
void DaemonAndroidImpl::stop()
{
//QMutexLocker locker(mutex);
Daemon.stop();
//setRunning(false);
}
void DaemonAndroidImpl::restart()
{
//QMutexLocker locker(mutex);
stop();
start();
}
/*
void DaemonAndroidImpl::setRunningCallback(runningChangedCallback cb)
{
m_RunningChangedCallback = cb;
}
bool DaemonAndroidImpl::isRunning()
{
return m_IsRunning;
}
void DaemonAndroidImpl::setRunning(bool newValue)
{
bool oldValue = m_IsRunning;
if(oldValue!=newValue)
{
m_IsRunning = newValue;
if(m_RunningChangedCallback)
m_RunningChangedCallback();
}
}
*/
static DaemonAndroidImpl daemon;
static char* argv[1]={strdup("tmp")};
/**
* returns error details if failed
* returns "ok" if daemon initialized and started okay
*/
std::string start(/*int argc, char* argv[]*/)
{
try
{
//int result;
{
//Log.d(TAG"Initialising the daemon...");
bool daemonInitSuccess = daemon.init(1,argv);
if(!daemonInitSuccess)
{
//QMessageBox::critical(0, "Error", "Daemon init failed");
return "Daemon init failed";
}
//Log.d(TAG"Initialised, creating the main window...");
//MainWindow w;
//Log.d(TAG"Before main window.show()...");
//w.show ();
{
//i2p::qt::Controller daemonQtController(daemon);
//Log.d(TAG"Starting the daemon...");
//emit daemonQtController.startDaemon();
//daemon.start ();
//Log.d(TAG"Starting GUI event loop...");
//result = app.exec();
//daemon.stop ();
daemon.start();
}
}
//QMessageBox::information(&w, "Debug", "demon stopped");
//Log.d(TAG"Exiting the application");
//return result;
}
catch (boost::exception& ex)
{
std::stringstream ss;
ss << boost::diagnostic_information(ex);
return ss.str();
}
catch (std::exception& ex)
{
std::stringstream ss;
ss << ex.what();
return ss.str();
}
catch(...)
{
return "unknown exception";
}
return "ok";
}
void stop()
{
daemon.stop();
}
}
}

@ -1,87 +0,0 @@
#ifndef DAEMON_ANDROID_H
#define DAEMON_ANDROID_H
#include <string>
namespace i2p
{
namespace android
{
class DaemonAndroidImpl
{
public:
DaemonAndroidImpl ();
~DaemonAndroidImpl ();
//typedef void (*runningChangedCallback)();
/**
* @return success
*/
bool init(int argc, char* argv[]);
void start();
void stop();
void restart();
//void setRunningCallback(runningChangedCallback cb);
//bool isRunning();
private:
//void setRunning(bool running);
private:
//QMutex* mutex;
//bool m_IsRunning;
//runningChangedCallback m_RunningChangedCallback;
};
/**
* returns "ok" if daemon init failed
* returns errinfo if daemon initialized and started okay
*/
std::string start();
// stops the daemon
void stop();
/*
class Worker : public QObject
{
Q_OBJECT
public:
Worker (DaemonAndroidImpl& daemon);
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void startDaemon();
void restartDaemon();
void stopDaemon();
signals:
void resultReady();
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller(DaemonAndroidImpl& daemon);
~Controller();
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void handleResults(){}
signals:
void startDaemon();
void stopDaemon();
void restartDaemon();
};
*/
}
}
#endif // DAEMON_ANDROID_H

@ -1,66 +0,0 @@
//#include <string.h>
#include <jni.h>
#include "org_purplei2p_i2pd_I2PD_JNI.h"
#include "DaemonAndroid.h"
#include "RouterContext.h"
#include "Transports.h"
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv * env, jclass clazz) {
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a/NEON (hard-float)"
#else
#define ABI "armeabi-v7a/NEON"
#endif
#else
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a (hard-float)"
#else
#define ABI "armeabi-v7a"
#endif
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__x86_64__)
#define ABI "x86_64"
#elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */
#define ABI "mips64"
#elif defined(__mips__)
#define ABI "mips"
#elif defined(__aarch64__)
#define ABI "arm64-v8a"
#else
#define ABI "unknown"
#endif
return env->NewStringUTF(ABI);
}
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv * env, jclass clazz) {
return env->NewStringUTF(i2p::android::start().c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
(JNIEnv * env, jclass clazz) {
i2p::android::stop();
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv * env, jclass clazz) {
i2p::context.SetAcceptsTunnels (false);
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected)
{
bool isConnectedBool = (bool) isConnected;
i2p::transport::transports.SetOnline (isConnectedBool);
}

@ -1,33 +0,0 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_purplei2p_i2pd_I2PD_JNI */
#ifndef _Included_org_purplei2p_i2pd_I2PD_JNI
#define _Included_org_purplei2p_i2pd_I2PD_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_purplei2p_i2pd_I2PD_JNI
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
#ifdef __cplusplus
}
#endif
#endif

@ -1,20 +0,0 @@
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

@ -1,14 +0,0 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-28

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

@ -1,27 +0,0 @@
<LinearLayout android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/vertical_page_margin"
android:paddingLeft="@dimen/horizontal_page_margin"
android:paddingRight="@dimen/horizontal_page_margin"
android:paddingTop="@dimen/vertical_page_margin"
tools:context=".I2PDPermsAskerActivity">
<TextView
android:id="@+id/textview_retry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/horizontal_page_margin"
android:visibility="gone"
/>
<Button
android:id="@+id/button_request_write_ext_storage_perms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retry requesting the SD card write permissions"
android:visibility="gone"/>
</LinearLayout>

@ -1,27 +0,0 @@
<LinearLayout android:id="@+id/layout_prompt"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/vertical_page_margin"
android:paddingLeft="@dimen/horizontal_page_margin"
android:paddingRight="@dimen/horizontal_page_margin"
android:paddingTop="@dimen/vertical_page_margin"
tools:context=".I2PDPermsAskerActivity">
<TextView
android:id="@+id/textview_explanation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/horizontal_page_margin"
android:text="SD card write access is required to write the keys and other files to the I2PD folder on SD card."
/>
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
/>
</LinearLayout>

@ -1,16 +0,0 @@
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".I2PDActivity">
<item
android:id="@+id/action_graceful_stop"
android:title="@string/action_graceful_stop"
android:orderInCategory="98"
/>
<item
android:id="@+id/action_stop"
android:title="@string/action_stop"
android:orderInCategory="99"
/>
</menu>

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">i2pd</string>
<string name="action_stop">Stop</string>
<string name="action_graceful_stop">Graceful Stop</string>
<string name="graceful_stop_is_already_in_progress">Graceful stop is already in progress</string>
<string name="graceful_stop_is_in_progress">Graceful stop is in progress</string>
<string name="already_stopped">Already stopped</string>
<string name="uninitialized">i2pd initializing</string>
<string name="starting">i2pd is starting</string>
<string name="jniLibraryLoaded">i2pd: loaded JNI libraries</string>
<string name="startedOkay">i2pd started</string>
<string name="startFailed">i2pd start failed</string>
<string name="gracefulShutdownInProgress">i2pd: graceful shutdown in progress</string>
<string name="stopped">i2pd has stopped</string>
<string name="remaining">remaining</string>
<string name="title_activity_i2_pdperms_asker_prompt">Prompt</string>
</resources>

@ -1,16 +0,0 @@
<resources>
<!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
<dimen name="margin_tiny">4dp</dimen>
<dimen name="margin_small">8dp</dimen>
<dimen name="margin_medium">16dp</dimen>
<dimen name="margin_large">32dp</dimen>
<dimen name="margin_huge">64dp</dimen>
<!-- Semantic definitions -->
<dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
<dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
</resources>

@ -1 +0,0 @@
rootProject.name = "i2pd"

@ -1,136 +0,0 @@
package org.purplei2p.i2pd;
import java.util.HashSet;
import java.util.Set;
import android.util.Log;
public class DaemonSingleton {
private static final String TAG="i2pd";
private static final DaemonSingleton instance = new DaemonSingleton();
public interface StateUpdateListener { void daemonStateUpdate(); }
private final Set<StateUpdateListener> stateUpdateListeners = new HashSet<>();
public static DaemonSingleton getInstance() {
return instance;
}
public synchronized void addStateChangeListener(StateUpdateListener listener) { stateUpdateListeners.add(listener); }
public synchronized void removeStateChangeListener(StateUpdateListener listener) { stateUpdateListeners.remove(listener); }
private synchronized void setState(State newState) {
if(newState==null)throw new NullPointerException();
State oldState = state;
if(oldState==null)throw new NullPointerException();
if(oldState.equals(newState))return;
state=newState;
fireStateUpdate1();
}
public synchronized void stopAcceptingTunnels() {
if(isStartedOkay()){
setState(State.gracefulShutdownInProgress);
I2PD_JNI.stopAcceptingTunnels();
}
}
private volatile boolean startedOkay;
public enum State {
uninitialized(R.string.uninitialized),
starting(R.string.starting),
jniLibraryLoaded(R.string.jniLibraryLoaded),
startedOkay(R.string.startedOkay),
startFailed(R.string.startFailed),
gracefulShutdownInProgress(R.string.gracefulShutdownInProgress),
stopped(R.string.stopped);
State(int statusStringResourceId) {
this.statusStringResourceId = statusStringResourceId;
}
private final int statusStringResourceId;
public int getStatusStringResourceId() {
return statusStringResourceId;
}
};
private volatile State state = State.uninitialized;
public State getState() { return state; }
{
setState(State.starting);
new Thread(new Runnable(){
@Override
public void run() {
try {
I2PD_JNI.loadLibraries();
setState(State.jniLibraryLoaded);
} catch (Throwable tr) {
lastThrowable=tr;
setState(State.startFailed);
return;
}
try {
synchronized (DaemonSingleton.this) {
daemonStartResult = I2PD_JNI.startDaemon();
if("ok".equals(daemonStartResult)){
setState(State.startedOkay);
setStartedOkay(true);
}else setState(State.startFailed);
}
} catch (Throwable tr) {
lastThrowable=tr;
setState(State.startFailed);
return;
}
}
}, "i2pdDaemonStart").start();
}
private Throwable lastThrowable;
private String daemonStartResult="N/A";
private void fireStateUpdate1() {
Log.i(TAG, "daemon state change: "+state);
for(StateUpdateListener listener : stateUpdateListeners) {
try {
listener.daemonStateUpdate();
} catch (Throwable tr) {
Log.e(TAG, "exception in listener ignored", tr);
}
}
}
public Throwable getLastThrowable() {
return lastThrowable;
}
public String getDaemonStartResult() {
return daemonStartResult;
}
private final Object startedOkayLock = new Object();
public boolean isStartedOkay() {
synchronized (startedOkayLock) {
return startedOkay;
}
}
private void setStartedOkay(boolean startedOkay) {
synchronized (startedOkayLock) {
this.startedOkay = startedOkay;
}
}
public synchronized void stopDaemon() {
if(isStartedOkay()){
try {I2PD_JNI.stopDaemon();}catch(Throwable tr){Log.e(TAG, "", tr);}
setStartedOkay(false);
setState(State.stopped);
}
}
}

@ -1,149 +0,0 @@
package org.purplei2p.i2pd;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.Toast;
public class ForegroundService extends Service {
private static final String TAG="FgService";
private volatile boolean shown;
private final DaemonSingleton.StateUpdateListener daemonStateUpdatedListener =
new DaemonSingleton.StateUpdateListener() {
@Override
public void daemonStateUpdate() {
try {
synchronized (ForegroundService.this) {
if (shown) cancelNotification();
showNotification();
}
} catch (Throwable tr) {
Log.e(TAG,"error ignored",tr);
}
}
};
private NotificationManager notificationManager;
// Unique Identification Number for the Notification.
// We use it on Notification start, and to cancel it.
private int NOTIFICATION = 1;
/**
* Class for clients to access. Because we know this service always
* runs in the same process as its clients, we don't need to deal with
* IPC.
*/
public class LocalBinder extends Binder {
ForegroundService getService() {
return ForegroundService.this;
}
}
@Override
public void onCreate() {
notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
synchronized (this) {
DaemonSingleton.getInstance().addStateChangeListener(daemonStateUpdatedListener);
if (!shown) daemonStateUpdatedListener.daemonStateUpdate();
}
// Tell the user we started.
// Toast.makeText(this, R.string.i2pd_service_started, Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("ForegroundService", "Received start id " + startId + ": " + intent);
return START_STICKY;
}
@Override
public void onDestroy() {
DaemonSingleton.getInstance().removeStateChangeListener(daemonStateUpdatedListener);
cancelNotification();
}
private synchronized void cancelNotification() {
// Cancel the persistent notification.
notificationManager.cancel(NOTIFICATION);
stopForeground(true);
// Tell the user we stopped.
// Toast.makeText(this, R.string.i2pd_service_stopped, Toast.LENGTH_SHORT).show();
shown=false;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
// This is the object that receives interactions from clients. See
// RemoteService for a more complete example.
private final IBinder mBinder = new LocalBinder();
/**
* Show a notification while this service is running.
*/
private synchronized void showNotification() {
// In this sample, we'll use the same text for the ticker and the expanded notification
CharSequence text = getText(DaemonSingleton.getInstance().getState().getStatusStringResourceId());
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, I2PDActivity.class), 0);
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
String channelId = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) ? createNotificationChannel() : "";
// Set the info for the views that show in the notification panel.
Notification notification = new NotificationCompat.Builder(this, channelId)
.setOngoing(true)
.setSmallIcon(R.drawable.itoopie_notification_icon) // the status icon
.setPriority(Notification.PRIORITY_DEFAULT)
.setCategory(Notification.CATEGORY_SERVICE)
.setTicker(text) // the status text
.setWhen(System.currentTimeMillis()) // the time stamp
.setContentTitle(getText(R.string.app_name)) // the label of the entry
.setContentText(text) // the contents of the entry
.setContentIntent(contentIntent) // The intent to send when the entry is clicked
.build();
// Send the notification.
//mNM.notify(NOTIFICATION, notification);
startForeground(NOTIFICATION, notification);
shown = true;
}
@RequiresApi(Build.VERSION_CODES.O)
private synchronized String createNotificationChannel() {
String channelId = getString(R.string.app_name);
CharSequence channelName = "I2Pd service";
NotificationChannel chan = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_LOW);
//chan.setLightColor(Color.PURPLE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager service = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
service.createNotificationChannel(chan);
return channelId;
}
private static final DaemonSingleton daemon = DaemonSingleton.getInstance();
}

@ -1,419 +0,0 @@
package org.purplei2p.i2pd;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
// For future package update checking
import org.purplei2p.i2pd.BuildConfig;
public class I2PDActivity extends Activity {
private static final String TAG = "i2pdActvt";
public static final int GRACEFUL_DELAY_MILLIS = 10 * 60 * 1000;
private TextView textView;
private boolean assetsCopied;
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd/";
private static final DaemonSingleton daemon = DaemonSingleton.getInstance();
private final DaemonSingleton.StateUpdateListener daemonStateUpdatedListener =
new DaemonSingleton.StateUpdateListener() {
@Override
public void daemonStateUpdate()
{
processAssets();
runOnUiThread(new Runnable(){
@Override
public void run() {
try {
if(textView==null) return;
Throwable tr = daemon.getLastThrowable();
if(tr!=null) {
textView.setText(throwableToString(tr));
return;
}
DaemonSingleton.State state = daemon.getState();
textView.setText(
String.valueOf(state)+
(DaemonSingleton.State.startFailed.equals(state)?": "+daemon.getDaemonStartResult():"")+
(DaemonSingleton.State.gracefulShutdownInProgress.equals(state)?": "+formatGraceTimeRemaining()+" "+getText(R.string.remaining):"")
);
} catch (Throwable tr) {
Log.e(TAG,"error ignored",tr);
}
}
});
}
};
private static volatile long graceStartedMillis;
private static final Object graceStartedMillis_LOCK=new Object();
private static String formatGraceTimeRemaining() {
long remainingSeconds;
synchronized (graceStartedMillis_LOCK){
remainingSeconds=Math.round(Math.max(0,graceStartedMillis+GRACEFUL_DELAY_MILLIS-System.currentTimeMillis())/1000.0D);
}
long remainingMinutes=(long)Math.floor(remainingSeconds/60.0D);
long remSec=remainingSeconds-remainingMinutes*60;
return remainingMinutes+":"+(remSec/10)+remSec%10;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
setContentView(textView);
daemon.addStateChangeListener(daemonStateUpdatedListener);
daemonStateUpdatedListener.daemonStateUpdate();
// set the app be foreground
doBindService();
final Timer gracefulQuitTimer = getGracefulQuitTimer();
if(gracefulQuitTimer!=null){
long gracefulStopAtMillis;
synchronized (graceStartedMillis_LOCK) {
gracefulStopAtMillis = graceStartedMillis + GRACEFUL_DELAY_MILLIS;
}
rescheduleGraceStop(gracefulQuitTimer, gracefulStopAtMillis);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
textView = null;
daemon.removeStateChangeListener(daemonStateUpdatedListener);
//cancelGracefulStop();
try{
doUnbindService();
}catch(Throwable tr){
Log.e(TAG, "", tr);
}
}
private static void cancelGracefulStop() {
Timer gracefulQuitTimer = getGracefulQuitTimer();
if(gracefulQuitTimer!=null) {
gracefulQuitTimer.cancel();
setGracefulQuitTimer(null);
}
}
private CharSequence throwableToString(Throwable tr) {
StringWriter sw = new StringWriter(8192);
PrintWriter pw = new PrintWriter(sw);
tr.printStackTrace(pw);
pw.close();
return sw.toString();
}
// private LocalService mBoundService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
// mBoundService = ((LocalService.LocalBinder)service).getService();
// Tell the user about this for our demo.
// Toast.makeText(Binding.this, R.string.local_service_connected,
// Toast.LENGTH_SHORT).show();
}
public void onServiceDisconnected(ComponentName className) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
// Because it is running in our same process, we should never
// see this happen.
// mBoundService = null;
// Toast.makeText(Binding.this, R.string.local_service_disconnected,
// Toast.LENGTH_SHORT).show();
}
};
private static volatile boolean mIsBound;
private void doBindService() {
synchronized (I2PDActivity.class) {
if (mIsBound) return;
// Establish a connection with the service. We use an explicit
// class name because we want a specific service implementation that
// we know will be running in our own process (and thus won't be
// supporting component replacement by other applications).
bindService(new Intent(this, ForegroundService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
}
private void doUnbindService() {
synchronized (I2PDActivity.class) {
if (mIsBound) {
// Detach our existing connection.
unbindService(mConnection);
mIsBound = false;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.options_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch(id){
case R.id.action_stop:
i2pdStop();
return true;
case R.id.action_graceful_stop:
i2pdGracefulStop();
return true;
}
return super.onOptionsItemSelected(item);
}
private void i2pdStop() {
cancelGracefulStop();
new Thread(new Runnable(){
@Override
public void run() {
Log.d(TAG, "stopping");
try{
daemon.stopDaemon();
}catch (Throwable tr) {
Log.e(TAG, "", tr);
}
}
},"stop").start();
}
private static volatile Timer gracefulQuitTimer;
private void i2pdGracefulStop() {
if(daemon.getState()==DaemonSingleton.State.stopped){
Toast.makeText(this, R.string.already_stopped,
Toast.LENGTH_SHORT).show();
return;
}
if(getGracefulQuitTimer()!=null){
Toast.makeText(this, R.string.graceful_stop_is_already_in_progress,
Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, R.string.graceful_stop_is_in_progress,
Toast.LENGTH_SHORT).show();
new Thread(new Runnable(){
@Override
public void run() {
try{
Log.d(TAG, "grac stopping");
if(daemon.isStartedOkay()) {
daemon.stopAcceptingTunnels();
long gracefulStopAtMillis;
synchronized (graceStartedMillis_LOCK) {
graceStartedMillis = System.currentTimeMillis();
gracefulStopAtMillis = graceStartedMillis + GRACEFUL_DELAY_MILLIS;
}
rescheduleGraceStop(null,gracefulStopAtMillis);
}else{
i2pdStop();
}
} catch(Throwable tr) {
Log.e(TAG,"",tr);
}
}
},"gracInit").start();
}
private void rescheduleGraceStop(Timer gracefulQuitTimerOld, long gracefulStopAtMillis) {
if(gracefulQuitTimerOld!=null)gracefulQuitTimerOld.cancel();
final Timer gracefulQuitTimer = new Timer(true);
setGracefulQuitTimer(gracefulQuitTimer);
gracefulQuitTimer.schedule(new TimerTask(){
@Override
public void run() {
i2pdStop();
}
}, Math.max(0,gracefulStopAtMillis-System.currentTimeMillis()));
final TimerTask tickerTask = new TimerTask() {
@Override
public void run() {
daemonStateUpdatedListener.daemonStateUpdate();
}
};
gracefulQuitTimer.scheduleAtFixedRate(tickerTask,0/*start delay*/,1000/*millis period*/);
}
private static Timer getGracefulQuitTimer() {
return gracefulQuitTimer;
}
private static void setGracefulQuitTimer(Timer gracefulQuitTimer) {
I2PDActivity.gracefulQuitTimer = gracefulQuitTimer;
}
/**
* Copy the asset at the specified path to this app's data directory. If the
* asset is a directory, its contents are also copied.
*
* @param path
* Path to asset, relative to app's assets directory.
*/
private void copyAsset(String path) {
AssetManager manager = getAssets();
// If we have a directory, we make it and recurse. If a file, we copy its
// contents.
try {
String[] contents = manager.list(path);
// The documentation suggests that list throws an IOException, but doesn't
// say under what conditions. It'd be nice if it did so when the path was
// to a file. That doesn't appear to be the case. If the returned array is
// null or has 0 length, we assume the path is to a file. This means empty
// directories will get turned into files.
if (contents == null || contents.length == 0)
throw new IOException();
// Make the directory.
File dir = new File(i2pdpath, path);
dir.mkdirs();
// Recurse on the contents.
for (String entry : contents) {
copyAsset(path + "/" + entry);
}
} catch (IOException e) {
copyFileAsset(path);
}
}
/**
* Copy the asset file specified by path to app's data directory. Assumes
* parent directories have already been created.
*
* @param path
* Path to asset, relative to app's assets directory.
*/
private void copyFileAsset(String path) {
File file = new File(i2pdpath, path);
if(!file.exists()) try {
InputStream in = getAssets().open(path);
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int read = in.read(buffer);
while (read != -1) {
out.write(buffer, 0, read);
read = in.read(buffer);
}
out.close();
in.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
private void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory()) {
for (File child : fileOrDirectory.listFiles()) {
deleteRecursive(child);
}
}
fileOrDirectory.delete();
}
private void processAssets() {
if (!assetsCopied) try {
assetsCopied = true; // prevent from running on every state update
File holderfile = new File(i2pdpath, "assets.ready");
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
StringBuilder text = new StringBuilder();
if (holderfile.exists()) try { // if holder file exists, read assets version string
BufferedReader br = new BufferedReader(new FileReader(holderfile));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
}
br.close();
}
catch (IOException e) {
Log.e(TAG, "", e);
}
// if version differs from current app version or null, try to delete certificates folder
if (!text.toString().contains(versionName)) try {
holderfile.delete();
File certpath = new File(i2pdpath, "certificates");
deleteRecursive(certpath);
}
catch (Throwable tr) {
Log.e(TAG, "", tr);
}
// copy assets. If processed file exists, it won't be overwrited
copyAsset("certificates");
copyAsset("i2pd.conf");
copyAsset("subscriptions.txt");
copyAsset("tunnels.conf");
// update holder file about successful copying
FileWriter writer = new FileWriter(holderfile);
writer.append(versionName);
writer.flush();
writer.close();
}
catch (Throwable tr)
{
Log.e(TAG,"copy assets",tr);
}
}
}

@ -1,171 +0,0 @@
package org.purplei2p.i2pd;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.lang.reflect.Method;
//dangerous perms, per https://developer.android.com/guide/topics/permissions/normal-permissions.html :
//android.permission.WRITE_EXTERNAL_STORAGE
public class I2PDPermsAskerActivity extends Activity {
private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
private Button button_request_write_ext_storage_perms;
private TextView textview_retry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//if less than Android 6, no runtime perms req system present
if (android.os.Build.VERSION.SDK_INT < 23) {
startMainActivity();
return;
}
setContentView(R.layout.activity_perms_asker);
button_request_write_ext_storage_perms = (Button) findViewById(R.id.button_request_write_ext_storage_perms);
textview_retry = (TextView) findViewById(R.id.textview_retry);
button_request_write_ext_storage_perms.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
request_write_ext_storage_perms();
}
});
request_write_ext_storage_perms();
}
private void request_write_ext_storage_perms() {
textview_retry.setVisibility(TextView.GONE);
button_request_write_ext_storage_perms.setVisibility(Button.GONE);
Method methodCheckPermission;
Method method_shouldShowRequestPermissionRationale;
Method method_requestPermissions;
try {
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
method_shouldShowRequestPermissionRationale =
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
Integer resultObj;
try {
resultObj = (Integer) methodCheckPermission.invoke(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (resultObj != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
Boolean aBoolean;
try {
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (aBoolean) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showExplanation();
} else {
// No explanation needed, we can request the permission.
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else startMainActivity();
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_WRITE_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
startMainActivity();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
textview_retry.setText("SD card write permission denied, you need to allow this to continue");
textview_retry.setVisibility(TextView.VISIBLE);
button_request_write_ext_storage_perms.setVisibility(Button.VISIBLE);
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
private void startMainActivity() {
startActivity(new Intent(this, I2PDActivity.class));
finish();
}
private static final int SHOW_EXPLANATION_REQUEST = 1; // The request code
private void showExplanation() {
Intent intent = new Intent(this, I2PDPermsExplanationActivity.class);
startActivityForResult(intent, SHOW_EXPLANATION_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == SHOW_EXPLANATION_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Request the permission
Method method_requestPermissions;
try {
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
finish(); //close the app
}
}
}
}

@ -1,38 +0,0 @@
package org.purplei2p.i2pd;
import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
public class I2PDPermsExplanationActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_perms_explanation);
ActionBar actionBar = getActionBar();
if(actionBar!=null)actionBar.setHomeButtonEnabled(false);
Button button_ok = (Button) findViewById(R.id.button_ok);
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
returnFromActivity();
}
});
}
private void returnFromActivity() {
Intent data = new Intent();
Activity parent = getParent();
if (parent == null) {
setResult(Activity.RESULT_OK, data);
} else {
parent.setResult(Activity.RESULT_OK, data);
}
finish();
}
}

@ -1,21 +0,0 @@
package org.purplei2p.i2pd;
public class I2PD_JNI {
public static native String getABICompiledWith();
/**
* returns error info if failed
* returns "ok" if daemon initialized and started okay
*/
public static native String startDaemon();
//should only be called after startDaemon() success
public static native void stopDaemon();
public static native void stopAcceptingTunnels();
public static native void onNetworkStateChanged(boolean isConnected);
public static void loadLibraries() {
System.loadLibrary("gnustl_shared");
System.loadLibrary("i2pd");
}
}

@ -1,30 +0,0 @@
package org.purplei2p.i2pd;
import android.util.Log;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkStateChangeReceiver extends BroadcastReceiver {
private static final String TAG = "i2pd";
//api level 1
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d(TAG,"Network state change");
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
boolean isConnected = activeNetworkInfo!=null && activeNetworkInfo.isConnected();
// https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html?hl=ru
// boolean isWiFi = activeNetworkInfo!=null && (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI);
I2PD_JNI.onNetworkStateChanged(isConnected);
} catch (Throwable tr) {
Log.d(TAG,"",tr);
}
}
}

@ -1,18 +0,0 @@
gen
tests
bin
libs
log*
obj
.gradle
.idea
.externalNativeBuild
ant.properties
local.properties
build.sh
android.iml
build
gradle
gradlew
gradlew.bat

@ -1,74 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
boost_filesystem \
boost_program_options \
crypto ssl \
miniupnpc
LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := $(IFADDRS_PATH)/ifaddrs.c \
$(wildcard $(LIB_SRC_PATH)/*.cpp)\
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp)\
$(DAEMON_SRC_PATH)/UnixDaemon.cpp \
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp \
$(DAEMON_SRC_PATH)/i2pd.cpp
include $(BUILD_EXECUTABLE)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/boost_1_64_0/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost_1_64_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc-2.1/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc-2.1/include
include $(PREBUILT_STATIC_LIBRARY)

@ -1,43 +0,0 @@
#APP_ABI := all
#APP_ABI := armeabi-v7a x86
#APP_ABI := x86
#APP_ABI := x86_64
APP_ABI := armeabi-v7a
#can be android-3 but will fail for x86 since arch-x86 is not present at ndkroot/platforms/android-3/ . libz is taken from there.
APP_PLATFORM := android-14
# http://stackoverflow.com/a/21386866/529442 http://stackoverflow.com/a/15616255/529442 to enable c++11 support in Eclipse
NDK_TOOLCHAIN_VERSION := 4.9
# APP_STL := stlport_shared --> does not seem to contain C++11 features
#APP_STL := gnustl_shared
APP_STL := gnustl_static
# Enable c++11 extensions in source code
APP_CPPFLAGS += -std=c++11 -fvisibility=default -fPIE
APP_CPPFLAGS += -DANDROID_BINARY -DANDROID -D__ANDROID__ -DUSE_UPNP
APP_LDFLAGS += -rdynamic -fPIE -pie
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
# Forcing debug optimization. Use `ndk-build NDK_DEBUG=1` instead.
#APP_OPTIM := debug
# git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
# git clone https://github.com/PurpleI2P/android-ifaddrs.git
# change to your own
I2PD_LIBS_PATH = /path/to/libraries
BOOST_PATH = $(I2PD_LIBS_PATH)/Boost-for-Android-Prebuilt
OPENSSL_PATH = $(I2PD_LIBS_PATH)/OpenSSL-for-Android-Prebuilt
MINIUPNP_PATH = $(I2PD_LIBS_PATH)/MiniUPnP-for-Android-Prebuilt
IFADDRS_PATH = $(I2PD_LIBS_PATH)/android-ifaddrs
# don't change me
I2PD_SRC_PATH = $(PWD)/..
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon

@ -1,49 +0,0 @@
version: 2.21.{build}
pull_requests:
do_not_increment_build_number: true
branches:
only:
- openssl
skip_tags: true
os: Visual Studio 2015
shallow_clone: true
clone_depth: 1
environment:
MSYS2_PATH_TYPE: inherit
CHERE_INVOKING: enabled_from_arguments
matrix:
- MSYSTEM: MINGW64
- MSYSTEM: MINGW32
install:
- c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Rns gcc-fortran gcc"
- c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syuu --force"
- c:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syuu --force"
- if "%MSYSTEM%" == "MINGW64" (
c:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-x86_64-boost mingw-w64-x86_64-miniupnpc"
) else (
c:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-boost mingw-w64-i686-miniupnpc"
)
- if "%MSYSTEM%" == "MINGW64" (
set "bitness=64"
) else (
set "bitness=32"
)
build_script:
- cmd: >-
cd \projects\i2pd
echo MSYSTEM = %MSYSTEM%, bitness = %bitness%
- c:\msys64\usr\bin\bash -lc "make USE_UPNP=yes -j2"
- 7z a -tzip -mx9 -mmt i2pd-mingw-win%bitness%.zip i2pd.exe
test: off
artifacts:
- path: i2pd-mingw-win*.zip

17
build/.gitignore vendored

@ -1,14 +1,27 @@
# Various generated files
/CMakeFiles/
/Testing/
/tests/
/.ninja_*
/arch.c
/build.ninja
/i2pd
/i2pd.exe
/i2pd.exe.debug
/libi2pd.a
/libi2pdclient.a
/libi2pdlang.a
/cmake_install.cmake
/CMakeCache.txt
/CPackConfig.cmake
/CPackSourceConfig.cmake
/CTestTestfile.cmake
/install_manifest.txt
/arch.c
/Makefile
# windows build script
i2pd*.zip
build*.log
build*.log
# MVS project files
*.vcxproj
*.vcxproj.filters
*.sln

@ -1,407 +1,319 @@
cmake_minimum_required ( VERSION 2.8.12 )
# this addresses CMP0059 with CMake > 3.3 for PCH flags
cmake_policy( VERSION 2.8.12 )
project ( "i2pd" )
cmake_minimum_required(VERSION 3.7)
if(${CMAKE_VERSION} VERSION_LESS 3.22)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
cmake_policy(VERSION 3.22)
endif()
# for debugging
#set(CMAKE_VERBOSE_MAKEFILE on)
# configurale options
option(WITH_AESNI "Use AES-NI instructions set" OFF)
option(WITH_AVX "Use AVX instructions" OFF)
option(WITH_HARDENING "Use hardening compiler flags" OFF)
option(WITH_LIBRARY "Build library" ON)
option(WITH_BINARY "Build binary" ON)
option(WITH_STATIC "Static build" OFF)
option(WITH_UPNP "Include support for UPnP client" OFF)
option(WITH_PCH "Use precompiled header" OFF)
option(WITH_GUI "Include GUI (currently MS Windows only)" ON)
option(WITH_MESHNET "Build for cjdns test network" OFF)
option(WITH_ADDRSANITIZER "Build with address sanitizer unix only" OFF)
option(WITH_THREADSANITIZER "Build with thread sanitizer unix only" OFF)
option(WITH_I2LUA "Build for i2lua" OFF)
option(WITH_WEBSOCKETS "Build with websocket ui" OFF)
# paths
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules" )
set ( CMAKE_SOURCE_DIR ".." )
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
set(CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
set(LIBI2PD_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd)
set(LIBI2PD_CLIENT_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd_client)
set(LANG_SRC_DIR ${CMAKE_SOURCE_DIR}/i18n)
set(DAEMON_SRC_DIR ${CMAKE_SOURCE_DIR}/daemon)
include(Version)
set_version("${LIBI2PD_SRC_DIR}/version.h" PROJECT_VERSION)
project(
i2pd
VERSION ${PROJECT_VERSION}
HOMEPAGE_URL "https://i2pd.website/"
LANGUAGES C CXX
)
# configurable options
option(WITH_AESNI "Use AES-NI instructions set" ON)
option(WITH_HARDENING "Use hardening compiler flags" OFF)
option(WITH_LIBRARY "Build library" ON)
option(WITH_BINARY "Build binary" ON)
option(WITH_STATIC "Static build" OFF)
option(WITH_UPNP "Include support for UPnP client" OFF)
option(WITH_GIT_VERSION "Use git commit info as version" OFF)
option(WITH_ADDRSANITIZER "Build with address sanitizer unix only" OFF)
option(WITH_THREADSANITIZER "Build with thread sanitizer unix only" OFF)
option(BUILD_TESTING "Build tests" OFF)
IF(BUILD_TESTING)
enable_testing()
ENDIF()
# Handle paths nicely
include(GNUInstallDirs)
# architecture
# Architecture
include(TargetArch)
target_architecture(ARCHITECTURE)
set(LIBI2PD_SRC_DIR ../libi2pd)
set(LIBI2PD_CLIENT_SRC_DIR ../libi2pd_client)
include_directories(${LIBI2PD_SRC_DIR})
include_directories(${LIBI2PD_CLIENT_SRC_DIR})
set (LIBI2PD_SRC
"${LIBI2PD_SRC_DIR}/BloomFilter.cpp"
"${LIBI2PD_SRC_DIR}/Config.cpp"
"${LIBI2PD_SRC_DIR}/CPU.cpp"
"${LIBI2PD_SRC_DIR}/Crypto.cpp"
"${LIBI2PD_SRC_DIR}/CryptoKey.cpp"
"${LIBI2PD_SRC_DIR}/Garlic.cpp"
"${LIBI2PD_SRC_DIR}/Gzip.cpp"
"${LIBI2PD_SRC_DIR}/HTTP.cpp"
"${LIBI2PD_SRC_DIR}/I2NPProtocol.cpp"
"${LIBI2PD_SRC_DIR}/Identity.cpp"
"${LIBI2PD_SRC_DIR}/LeaseSet.cpp"
"${LIBI2PD_SRC_DIR}/FS.cpp"
"${LIBI2PD_SRC_DIR}/Log.cpp"
"${LIBI2PD_SRC_DIR}/NTCPSession.cpp"
"${LIBI2PD_SRC_DIR}/NetDbRequests.cpp"
"${LIBI2PD_SRC_DIR}/NetDb.cpp"
"${LIBI2PD_SRC_DIR}/Profiling.cpp"
"${LIBI2PD_SRC_DIR}/Reseed.cpp"
"${LIBI2PD_SRC_DIR}/RouterContext.cpp"
"${LIBI2PD_SRC_DIR}/RouterInfo.cpp"
"${LIBI2PD_SRC_DIR}/SSU.cpp"
"${LIBI2PD_SRC_DIR}/SSUData.cpp"
"${LIBI2PD_SRC_DIR}/SSUSession.cpp"
"${LIBI2PD_SRC_DIR}/Streaming.cpp"
"${LIBI2PD_SRC_DIR}/Destination.cpp"
"${LIBI2PD_SRC_DIR}/TransitTunnel.cpp"
"${LIBI2PD_SRC_DIR}/Tunnel.cpp"
"${LIBI2PD_SRC_DIR}/TunnelGateway.cpp"
"${LIBI2PD_SRC_DIR}/Transports.cpp"
"${LIBI2PD_SRC_DIR}/TunnelEndpoint.cpp"
"${LIBI2PD_SRC_DIR}/TunnelPool.cpp"
"${LIBI2PD_SRC_DIR}/Base.cpp"
"${LIBI2PD_SRC_DIR}/util.cpp"
"${LIBI2PD_SRC_DIR}/Datagram.cpp"
"${LIBI2PD_SRC_DIR}/Family.cpp"
"${LIBI2PD_SRC_DIR}/Signature.cpp"
"${LIBI2PD_SRC_DIR}/Timestamp.cpp"
"${LIBI2PD_SRC_DIR}/api.cpp"
"${LIBI2PD_SRC_DIR}/Event.cpp"
"${LIBI2PD_SRC_DIR}/Gost.cpp"
"${LIBI2PD_SRC_DIR}/ChaCha20.cpp"
"${LIBI2PD_SRC_DIR}/Poly1305.cpp"
"${LIBI2PD_SRC_DIR}/Ed25519.cpp"
"${LIBI2PD_SRC_DIR}/NTCP2.cpp"
)
if (WITH_WEBSOCKETS)
add_definitions(-DWITH_EVENTS)
find_package(websocketpp REQUIRED)
endif ()
if (WIN32 OR MSYS)
list (APPEND LIBI2PD_SRC "${CMAKE_SOURCE_DIR}/I2PEndian.cpp")
endif ()
include(CheckAtomic)
if (WITH_I2LUA)
add_definitions(-DI2LUA)
if(WITH_STATIC)
if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
endif()
include_directories(${LIBI2PD_SRC_DIR})
FILE(GLOB LIBI2PD_SRC ${LIBI2PD_SRC_DIR}/*.cpp)
add_library(libi2pd ${LIBI2PD_SRC})
set_target_properties(libi2pd PROPERTIES PREFIX "")
if (WITH_LIBRARY)
if(WITH_LIBRARY)
install(TARGETS libi2pd
EXPORT libi2pd
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries)
# TODO Make libi2pd available to 3rd party projects via CMake as imported target
# FIXME This pulls stdafx
# install(EXPORT libi2pd DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
set (CLIENT_SRC
"${LIBI2PD_CLIENT_SRC_DIR}/AddressBook.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/BOB.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/ClientContext.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/MatchedDestination.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/I2PTunnel.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/I2PService.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/SAM.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/SOCKS.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/HTTPProxy.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/I2CP.cpp"
"${LIBI2PD_CLIENT_SRC_DIR}/WebSocks.cpp"
)
if(WITH_WEBSOCKETS)
list (APPEND CLIENT_SRC "${LIBI2PD_CLIENT_SRC_DIR}/Websocket.cpp")
endif ()
include_directories(${LIBI2PD_CLIENT_SRC_DIR})
FILE(GLOB CLIENT_SRC ${LIBI2PD_CLIENT_SRC_DIR}/*.cpp)
add_library(libi2pdclient ${CLIENT_SRC})
set_target_properties(libi2pdclient PROPERTIES PREFIX "")
if (WITH_LIBRARY)
if(WITH_LIBRARY)
install(TARGETS libi2pdclient
EXPORT libi2pdclient
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries)
endif()
set(DAEMON_SRC_DIR ../daemon)
include_directories(${LANG_SRC_DIR})
FILE(GLOB LANG_SRC ${LANG_SRC_DIR}/*.cpp)
add_library(libi2pdlang ${LANG_SRC})
set_target_properties(libi2pdlang PROPERTIES PREFIX "")
set (DAEMON_SRC
if(WITH_LIBRARY)
install(TARGETS libi2pdlang
EXPORT libi2pdlang
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT Libraries)
endif()
include_directories(${DAEMON_SRC_DIR})
set(DAEMON_SRC
"${DAEMON_SRC_DIR}/Daemon.cpp"
"${DAEMON_SRC_DIR}/HTTPServer.cpp"
"${DAEMON_SRC_DIR}/I2PControl.cpp"
"${DAEMON_SRC_DIR}/I2PControlHandlers.cpp"
"${DAEMON_SRC_DIR}/i2pd.cpp"
"${DAEMON_SRC_DIR}/UPnP.cpp"
)
if (WITH_MESHNET)
add_definitions(-DMESHNET)
endif ()
if(WIN32)
set(WIN32_SRC_DIR ${CMAKE_SOURCE_DIR}/Win32)
include_directories(${WIN32_SRC_DIR})
if (WITH_UPNP)
list(APPEND DAEMON_SRC
"${WIN32_SRC_DIR}/DaemonWin32.cpp"
"${WIN32_SRC_DIR}/Win32App.cpp"
"${WIN32_SRC_DIR}/Win32Service.cpp"
"${WIN32_SRC_DIR}/Win32NetState.cpp"
)
file(GLOB WIN32_RC ${WIN32_SRC_DIR}/*.rc)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_APP -DWIN32_LEAN_AND_MEAN -DNOMINMAX")
endif()
if(WITH_UPNP)
add_definitions(-DUSE_UPNP)
if (NOT MSVC AND NOT MSYS)
set(DL_LIB ${CMAKE_DL_LIBS})
endif ()
endif ()
# compiler flags customization (by vendor)
if (MSVC)
add_definitions( -DWIN32_LEAN_AND_MEAN -DNOMINMAX )
# TODO Check & report to Boost dev, there should be no need for these two
add_definitions( -DBOOST_THREAD_NO_LIB -DBOOST_CHRONO_NO_LIB )
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL" )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO /LTCG" )
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} /GL" )
set( CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO /LTCG" )
endif()
if(WITH_GIT_VERSION)
include(GetGitRevisionDescription)
git_describe(GIT_VERSION)
add_definitions(-DGITVER=${GIT_VERSION})
endif()
if(APPLE)
add_definitions(-DMAC_OSX)
endif()
if(HAIKU)
add_definitions(-D_DEFAULT_SOURCE -D_GNU_SOURCE)
endif()
if(MSVC)
add_definitions(-DWINVER=0x0600)
add_definitions(-D_WIN32_WINNT=0x0600)
else()
if (MSYS OR MINGW)
add_definitions( -DWIN32_LEAN_AND_MEAN )
endif ()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Winvalid-pch -Wno-unused-parameter" )
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pedantic" )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Winvalid-pch -Wno-unused-parameter -Wno-uninitialized")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pedantic")
# TODO: The following is incompatible with static build and enabled hardening for OpenWRT.
# Multiple definitions of __stack_chk_fail (libssp & libc)
set( CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -flto -s -ffunction-sections -fdata-sections" )
set( CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "-Wl,--gc-sections" ) # -flto is added from above
endif ()
# check for c++11 support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" CXX11_SUPPORTED)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" CXX0X_SUPPORTED)
if (CXX11_SUPPORTED)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
elseif (CXX0X_SUPPORTED) # gcc 4.6
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
elseif (NOT MSVC)
message(SEND_ERROR "C++11 standard not seems to be supported by compiler. Too old version?")
endif ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe")
if (WITH_HARDENING)
add_definitions( "-D_FORTIFY_SOURCE=2" )
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security -Werror=format-security" )
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector --param ssp-buffer-size=4" )
endif ()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Multiple definitions of __stack_chk_fail(libssp & libc)
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -flto -s")
endif()
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -ffunction-sections -fdata-sections")
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "-Wl,--gc-sections") # -flto is added from above
# check for c++17 & c++11 support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++17" CXX17_SUPPORTED)
CHECK_CXX_COMPILER_FLAG("-std=c++11" CXX11_SUPPORTED)
if(CXX17_SUPPORTED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
elseif(CXX11_SUPPORTED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
else()
message(SEND_ERROR "C++17 nor C++11 standard not seems to be supported by compiler. Too old version?")
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe")
if(WITH_HARDENING)
add_definitions("-D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security -Werror=format-security")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector --param ssp-buffer-size=4")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# more tweaks
if (LINUX)
set (CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -stdlib=libstdc++" ) # required for <atomic>
if(LINUX)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -stdlib=libstdc++") # required for <atomic>
list(APPEND CMAKE_REQUIRED_LIBRARIES "stdc++") # required to link with -stdlib=libstdc++
endif()
if (NOT (MSVC OR MSYS OR APPLE))
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-const-variable -Wno-overloaded-virtual -Wno-c99-extensions" )
if(NOT APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-const-variable -Wno-overloaded-virtual -Wno-c99-extensions")
endif()
endif ()
if (WITH_HARDENING AND MSVC)
# Most security options like dynamic base, buffer & stack checks are ON by default
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:cf" )
endif ()
endif()
# compiler flags customization (by system)
if (UNIX)
list (APPEND DAEMON_SRC "${DAEMON_SRC_DIR}/UnixDaemon.cpp")
if (NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR APPLE))
# compiler flags customization(by system)
if(UNIX)
list(APPEND DAEMON_SRC "${DAEMON_SRC_DIR}/UnixDaemon.cpp")
if(NOT(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR APPLE))
# "'sleep_for' is not a member of 'std::this_thread'" in gcc 4.7/4.8
add_definitions( "-D_GLIBCXX_USE_NANOSLEEP=1" )
endif ()
elseif (WIN32 OR MSYS)
list (APPEND DAEMON_SRC "${CMAKE_SOURCE_DIR}/Win32/DaemonWin32.cpp")
if (WITH_GUI)
list (APPEND DAEMON_SRC "${CMAKE_SOURCE_DIR}/Win32/Win32App.cpp")
set_source_files_properties("${CMAKE_SOURCE_DIR}/Win32/DaemonWin32.cpp"
PROPERTIES COMPILE_DEFINITIONS WIN32_APP)
endif ()
list (APPEND DAEMON_SRC "${CMAKE_SOURCE_DIR}/Win32/Win32Service.cpp")
list (APPEND DAEMON_SRC "${CMAKE_SOURCE_DIR}/Win32/Resource.rc")
endif ()
if (WITH_AESNI)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes" )
add_definitions("-D_GLIBCXX_USE_NANOSLEEP=1")
endif()
endif()
if (WITH_AVX)
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx" )
# Note: AES-NI and AVX is available on x86-based CPU's.
# Here also ARM64 implementation, but currently we don't support it.
# MSVC is not supported due to different ASM processing, so we hope OpenSSL has its own checks to run optimized code.
if(WITH_AESNI AND (ARCHITECTURE MATCHES "x86_64" OR ARCHITECTURE MATCHES "i386"))
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
endif()
add_definitions(-D__AES__)
endif()
if (WITH_ADDRSANITIZER)
if (NOT MSVC)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address" )
else ()
message( SEND_ERROR "MSVC does not support address sanitizer option")
endif()
if(WITH_ADDRSANITIZER)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
endif()
if (WITH_THREADSANITIZER)
if (WITH_ADDRSANITIZER)
message( FATAL_ERROR "thread sanitizer option cannot be combined with address sanitizer")
elseif (NOT MSVC)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread" )
else ()
message( SEND_ERROR "MSVC does not support address sanitizer option")
if(WITH_THREADSANITIZER)
if(WITH_ADDRSANITIZER)
message(FATAL_ERROR "thread sanitizer option cannot be combined with address sanitizer")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
endif()
endif()
# Use std::atomic instead of GCC builtins on macOS PowerPC:
# For more information refer to: https://github.com/PurpleI2P/i2pd/issues/1726#issuecomment-1306335111
# This has been fixed in Boost 1.81, nevertheless we retain the setting for the sake of compatibility.
if(APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
add_definitions(-DBOOST_SP_USE_STD_ATOMIC)
endif()
# libraries
# TODO: once CMake 3.1+ becomes mainstream, see e.g. http://stackoverflow.com/a/29871891/673826
# use imported Threads::Threads instead
set(THREADS_PREFER_PTHREAD_FLAG ON)
if (IOS)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
else()
find_package ( Threads REQUIRED )
endif()
if(THREADS_HAVE_PTHREAD_ARG) # compile time flag
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
find_package(Threads REQUIRED)
if(WITH_STATIC)
if(NOT MSVC)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
endif()
if (WITH_STATIC)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
if (WIN32 AND NOT MSYS AND NOT MINGW)
# http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endforeach(flag_var)
else ()
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
endif ()
set(BUILD_SHARED_LIBS OFF)
if (${CMAKE_CXX_COMPILER} MATCHES ".*-openwrt-.*")
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )
# set( CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,--whole-archive -lpthread -Wl,--no-whole-archive" )
set( CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,-u,pthread_create,-u,pthread_once,-u,pthread_mutex_lock,-u,pthread_mutex_unlock,-u,pthread_join,-u,pthread_equal,-u,pthread_detach,-u,pthread_cond_wait,-u,pthread_cond_signal,-u,pthread_cond_destroy,-u,pthread_cond_broadcast,-u,pthread_cancel" )
endif ()
else()
if (NOT WIN32 AND NOT MSYS)
# TODO: Consider separate compilation for LIBI2PD_SRC for library.
# No need in -fPIC overhead for binary if not interested in library
# HINT: revert c266cff CMakeLists.txt: compilation speed up
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" )
endif ()
add_definitions(-DBOOST_SYSTEM_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_REGEX_DYN_LINK)
endif ()
if (WITH_PCH)
include_directories(BEFORE ${CMAKE_BINARY_DIR})
add_library(stdafx STATIC "${LIBI2PD_SRC_DIR}/stdafx.cpp")
if(MSVC)
target_compile_options(stdafx PRIVATE /Ycstdafx.h /Zm155)
add_custom_command(TARGET stdafx POST_BUILD
COMMAND xcopy /y stdafx.dir\\$<CONFIG>\\*.pdb libi2pd.dir\\$<CONFIG>\\
COMMAND xcopy /y stdafx.dir\\$<CONFIG>\\*.pdb i2pdclient.dir\\$<CONFIG>\\
COMMAND xcopy /y stdafx.dir\\$<CONFIG>\\*.pdb i2pd.dir\\$<CONFIG>\\
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
target_compile_options(libi2pd PRIVATE /FIstdafx.h /Yustdafx.h /Zm155 "/Fp${CMAKE_BINARY_DIR}/stdafx.dir/$<CONFIG>/stdafx.pch")
target_compile_options(libi2pdclient PRIVATE /FIstdafx.h /Yustdafx.h /Zm155 "/Fp${CMAKE_BINARY_DIR}/stdafx.dir/$<CONFIG>/stdafx.pch")
set(Boost_USE_STATIC_RUNTIME ON)
else()
string(TOUPPER ${CMAKE_BUILD_TYPE} BTU)
get_directory_property(DEFS DEFINITIONS)
string(REPLACE " " ";" FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTU}} ${DEFS}")
add_custom_command(TARGET stdafx PRE_BUILD
COMMAND ${CMAKE_CXX_COMPILER} ${FLAGS} -c ${CMAKE_CURRENT_SOURCE_DIR}/../libi2pd/stdafx.h -o ${CMAKE_BINARY_DIR}/stdafx.h.gch
)
target_compile_options(libi2pd PRIVATE -include libi2pd/stdafx.h)
target_compile_options(libi2pdclient PRIVATE -include libi2pd/stdafx.h)
set(Boost_USE_STATIC_RUNTIME OFF)
endif()
target_link_libraries(libi2pd stdafx)
endif()
target_link_libraries(libi2pdclient libi2pd)
if(MSVC)
set(OPENSSL_MSVC_STATIC_RT ON)
endif()
set(OPENSSL_USE_STATIC_LIBS ON)
set(ZLIB_USE_STATIC_LIBS ON)
if(MSVC)
set(ZLIB_NAMES zlibstatic zlibstat)
else()
set(ZLIB_NAMES libz zlibstatic zlibstat zlib z)
endif()
if(WITH_UPNP)
set(MINIUPNPC_USE_STATIC_LIBS ON)
add_definitions(-DMINIUPNP_STATICLIB)
endif()
find_package ( Boost COMPONENTS system filesystem program_options date_time REQUIRED )
if(NOT DEFINED Boost_INCLUDE_DIRS)
set(BUILD_SHARED_LIBS OFF)
if(${CMAKE_CXX_COMPILER} MATCHES ".*-openwrt-.*")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
# set(CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,--whole-archive -lpthread -Wl,--no-whole-archive")
set(CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,-u,pthread_create,-u,pthread_once,-u,pthread_mutex_lock,-u,pthread_mutex_unlock,-u,pthread_join,-u,pthread_equal,-u,pthread_detach,-u,pthread_cond_wait,-u,pthread_cond_signal,-u,pthread_cond_destroy,-u,pthread_cond_broadcast,-u,pthread_cancel")
endif()
else()
# TODO: Consider separate compilation for LIBI2PD_SRC for library.
# No need in -fPIC overhead for binary if not interested in library
# HINT: revert c266cff CMakeLists.txt: compilation speed up
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif()
add_definitions(-DBOOST_ATOMIC_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_REGEX_DYN_LINK)
if(WIN32)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
endif()
endif()
find_package(Boost REQUIRED COMPONENTS system filesystem program_options date_time OPTIONAL_COMPONENTS atomic)
if(NOT DEFINED Boost_FOUND)
message(SEND_ERROR "Boost is not found, or your boost version was below 1.46. Please download Boost!")
endif()
find_package ( OpenSSL REQUIRED )
if(NOT DEFINED OPENSSL_INCLUDE_DIR)
find_package(OpenSSL REQUIRED)
if(NOT DEFINED OPENSSL_FOUND)
message(SEND_ERROR "Could not find OpenSSL. Please download and install it first!")
endif()
if (WITH_UPNP)
find_package ( MiniUPnPc REQUIRED )
include_directories( SYSTEM ${MINIUPNPC_INCLUDE_DIR} )
if(OPENSSL_VERSION VERSION_GREATER_EQUAL "3.0.0")
add_definitions(-DOPENSSL_SUPPRESS_DEPRECATED)
endif()
find_package ( ZLIB )
if (NOT ZLIB_FOUND )
# We are probably on Windows
find_program( PATCH patch C:/Program Files/Git/usr/bin C:/msys64/usr/bin C:/msys32/usr/bin C:/Strawberry/c/bin )
include( ExternalProject )
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( ZLIB_EXTRA -DAMD64=ON )
if(WITH_UPNP)
find_package(MiniUPnPc REQUIRED)
if(NOT MINIUPNPC_FOUND)
message(SEND_ERROR "Could not find MiniUPnPc. Please download and install it first!")
else()
set( ZLIB_EXTRA -DASM686=ON "-DCMAKE_ASM_MASM_FLAGS=/W0 /safeseh" )
include_directories(SYSTEM ${MINIUPNPC_INCLUDE_DIR})
endif()
ExternalProject_Add(zlib-project
URL http://zlib.net/zlib-1.2.8.tar.gz
URL_MD5 44d667c142d7cda120332623eab69f40
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/zlib
PATCH_COMMAND "${PATCH}" -p0 < ${CMAKE_CURRENT_SOURCE_DIR}/cmake-zlib-static.patch
&& "${PATCH}" -p0 < ${CMAKE_CURRENT_SOURCE_DIR}/cmake-zlib-amd64.patch
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DWITH_STATIC=${WITH_STATIC} ${ZLIB_EXTRA}
)
if (WITH_PCH)
add_dependencies( stdafx zlib-project )
else ()
add_dependencies( libi2pd zlib-project )
endif ()
# ExternalProject_Get_Property(zlib-project install_dir)
set ( ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/zlib/include" CACHE FILEPATH "zlib include dir" FORCE)
if (NOT WITH_STATIC)
set ( ZLIB_LIBRARY debug zlibd optimized zlib CACHE STRING "zlib libraries" FORCE)
endif ()
link_directories(${CMAKE_CURRENT_BINARY_DIR}/zlib/lib)
else()
link_directories(${ZLIB_ROOT}/lib)
endif ()
if (WITH_STATIC AND (MSVC OR MSYS))
set ( ZLIB_LIBRARY debug zlibstaticd optimized zlibstatic CACHE STRING "zlib libraries" FORCE)
endif ()
# load includes
include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
# warn if for meshnet
if (WITH_MESHNET)
message(STATUS "Building for testnet")
message(WARNING "This build will NOT work on mainline i2p")
endif()
include(CheckAtomic)
find_package(ZLIB)
if(ZLIB_FOUND)
link_directories(${ZLIB_ROOT}/lib)
endif()
# load includes
include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
# show summary
message(STATUS "---------------------------------------")
@ -413,49 +325,44 @@ message(STATUS "Architecture : ${ARCHITECTURE}")
message(STATUS "Install prefix: : ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Options:")
message(STATUS " AESNI : ${WITH_AESNI}")
message(STATUS " AVX : ${WITH_AVX}")
message(STATUS " HARDENING : ${WITH_HARDENING}")
message(STATUS " LIBRARY : ${WITH_LIBRARY}")
message(STATUS " BINARY : ${WITH_BINARY}")
message(STATUS " STATIC BUILD : ${WITH_STATIC}")
message(STATUS " UPnP : ${WITH_UPNP}")
message(STATUS " PCH : ${WITH_PCH}")
message(STATUS " MESHNET : ${WITH_MESHNET}")
if(WITH_GIT_VERSION)
message(STATUS " GIT VERSION : ${WITH_GIT_VERSION} (${GIT_VERSION})")
else()
message(STATUS " GIT VERSION : ${WITH_GIT_VERSION}")
endif()
message(STATUS " ADDRSANITIZER : ${WITH_ADDRSANITIZER}")
message(STATUS " THREADSANITIZER : ${WITH_THREADSANITIZER}")
message(STATUS " I2LUA : ${WITH_I2LUA}")
message(STATUS " WEBSOCKETS : ${WITH_WEBSOCKETS}")
message(STATUS "---------------------------------------")
#Handle paths nicely
include(GNUInstallDirs)
if (WITH_BINARY)
add_executable ( "${PROJECT_NAME}" ${DAEMON_SRC} )
if (WIN32 AND WITH_GUI)
set_target_properties("${PROJECT_NAME}" PROPERTIES WIN32_EXECUTABLE TRUE )
endif()
if(NOT MSVC)
if (WITH_STATIC)
set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-static" )
endif ()
if(WITH_BINARY)
if(WIN32)
add_executable("${PROJECT_NAME}" WIN32 ${DAEMON_SRC} ${WIN32_RC})
else()
add_executable("${PROJECT_NAME}" ${DAEMON_SRC})
endif()
if (WITH_PCH)
if (MSVC)
target_compile_options("${PROJECT_NAME}" PRIVATE /FIstdafx.h /Yustdafx.h /Zm155 "/Fp${CMAKE_BINARY_DIR}/stdafx.dir/$<CONFIG>/stdafx.pch")
else()
target_compile_options("${PROJECT_NAME}" PRIVATE -include libi2pd/stdafx.h)
if(WIN32)
list(APPEND MINGW_EXTRA "wsock32" "ws2_32" "iphlpapi")
# OpenSSL may require Crypt32 library on MSVC build, which is not added by CMake lesser than 3.21
if(MSVC AND ${CMAKE_VERSION} VERSION_LESS 3.21)
list(APPEND MINGW_EXTRA "crypt32")
endif()
endif()
if (WITH_HARDENING AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT MSYS AND NOT MINGW)
set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-z relro -z now" )
endif ()
if(WITH_STATIC)
if(NOT MSVC)
set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-static")
endif()
endif()
if (WITH_UPNP)
target_link_libraries("${PROJECT_NAME}" "${MINIUPNPC_LIBRARY}")
endif ()
if(WITH_HARDENING AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-z relro -z now")
endif()
# FindBoost pulls pthread for thread which is broken for static linking at least on Ubuntu 15.04
list(GET Boost_LIBRARIES -1 LAST_Boost_LIBRARIES)
@ -463,127 +370,24 @@ if (WITH_BINARY)
list(REMOVE_AT Boost_LIBRARIES -1)
endif()
if (MSYS OR MINGW)
set (MINGW_EXTRA -lws2_32 -lmswsock -liphlpapi )
endif ()
if (WITH_STATIC)
# synchronization library is incompatible with Windows 7
if(WIN32)
get_target_property(BOOSTFSLIBS Boost::filesystem INTERFACE_LINK_LIBRARIES)
list(REMOVE_ITEM BOOSTFSLIBS synchronization)
set_target_properties(Boost::filesystem PROPERTIES INTERFACE_LINK_LIBRARIES "${BOOSTFSLIBS}")
endif()
if(WITH_STATIC)
set(DL_LIB ${CMAKE_DL_LIBS})
endif()
target_link_libraries( "${PROJECT_NAME}" libi2pd libi2pdclient ${DL_LIB} ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES})
target_link_libraries("${PROJECT_NAME}" libi2pd libi2pdclient libi2pdlang ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto ${MINIUPNPC_LIBRARY} ZLIB::ZLIB Threads::Threads ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES})
install(TARGETS "${PROJECT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime)
set (APPS "\${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
set (DIRS "${Boost_LIBRARY_DIR};${OPENSSL_INCLUDE_DIR}/../bin;${ZLIB_INCLUDE_DIR}/../bin;/mingw32/bin")
if (MSVC)
install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS DEBUG RELWITHDEBINFO COMPONENT Symbols)
# TODO Somehow this picks lots of unrelevant stuff with MSYS. OS X testing needed.
INSTALL(CODE "
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
" COMPONENT Runtime)
endif ()
endif ()
install(FILES ../LICENSE
DESTINATION .
COMPONENT Runtime
)
# Take a copy on Appveyor
install(FILES "C:/projects/openssl-$ENV{OPENSSL}/LICENSE"
DESTINATION .
COMPONENT Runtime
RENAME LICENSE_OPENSSL
OPTIONAL # for local builds only!
)
set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
set(DIRS "${Boost_LIBRARY_DIR};${OPENSSL_INCLUDE_DIR}/../bin;${ZLIB_INCLUDE_DIR}/../bin;/mingw32/bin")
endif()
file(GLOB_RECURSE I2PD_SOURCES "../libi2pd/*.cpp" "../libi2pd_client/*.cpp" "../daemon/*.cpp" "../build" "../Win32" "../Makefile*")
install(FILES ${I2PD_SOURCES} DESTINATION src/ COMPONENT Source)
# install(DIRECTORY ../ DESTINATION src/
# # OPTIONAL
# COMPONENT Source FILES_MATCHING
# PATTERN .git EXCLUDE
# PATTERN "*.cpp"
# )
file(GLOB I2PD_HEADERS "../libi2pd/*.h" "../libi2pd_client/*.h" "../daemon/*.h")
install(FILES ${I2PD_HEADERS} DESTINATION src/ COMPONENT Headers)
# install(DIRECTORY ../ DESTINATION src/
# # OPTIONAL
# COMPONENT Headers FILES_MATCHING
# PATTERN .git EXCLUDE
# PATTERN "*.h"
# )
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Purple I2P, a C++ I2P daemon")
set(CPACK_PACKAGE_VENDOR "Purple I2P")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE")
file(READ ../libi2pd/version.h version_h)
string(REGEX REPLACE ".*I2PD_VERSION_MAJOR ([0-9]+).*" "\\1" CPACK_PACKAGE_VERSION_MAJOR "${version_h}")
string(REGEX REPLACE ".*I2PD_VERSION_MINOR ([0-9]+).*" "\\1" CPACK_PACKAGE_VERSION_MINOR "${version_h}")
string(REGEX REPLACE ".*I2PD_VERSION_MICRO ([0-9]+).*" "\\1" CPACK_PACKAGE_VERSION_MICRO "${version_h}")
string(REGEX REPLACE ".*I2PD_VERSION_PATCH ([0-9]+).*" "\\1" CPACK_PACKAGE_VERSION_PATCH "${version_h}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Purple I2P")# ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
include(CPackComponent)
cpack_add_component(Runtime
DESCRIPTION "Main files"
REQUIRED INSTALL_TYPES minimal)
cpack_add_component(Symbols
DISPLAY_NAME "Debug symbols"
DESCRIPTION "Debug symbols for use with WinDbg or Visual Studio"
INSTALL_TYPES recommended full
)
cpack_add_component(Libraries
DESCRIPTION "Binary libraries for development"
INSTALL_TYPES full dev3rd
)
cpack_add_component(Source
DISPLAY_NAME "Source code"
DESCRIPTION "I2pd source code"
INSTALL_TYPES full
)
cpack_add_component(Headers
DISPLAY_NAME "Header files"
DESCRIPTION "I2pd header files for development"
INSTALL_TYPES full dev3rd
)
install(FILES ${MINIUPNPC_INCLUDE_DIR}/miniupnpc/miniupnpc.dll
DESTINATION bin
COMPONENT MiniUPnPc
OPTIONAL
)
install(FILES ${MINIUPNPC_INCLUDE_DIR}/miniupnpc/LICENSE
DESTINATION .
COMPONENT MiniUPnPc
RENAME LICENSE_MINIUPNPC
OPTIONAL
)
cpack_add_component(MiniUPnPc
INSTALL_TYPES full recommended
# DOWNLOADED
# ARCHIVE_FILE miniupnpc-win32.zip
)
cpack_add_install_type(recommended DISPLAY_NAME Recommended)
cpack_add_install_type(dev3rd DISPLAY_NAME "Third party development")
cpack_add_install_type(full DISPLAY_NAME Full)
cpack_add_install_type(minimal DISPLAY_NAME Minimal)
if((WIN32 OR MSYS) AND NOT UNIX)
# There is a bug in NSI that does not handle full unix paths properly. Make
# sure there is at least one set of four (4) backlasshes.
set(CPACK_NSIS_DEFINES "RequestExecutionLevel user")
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../Win32\\\\mask.bmp")
set(CPACK_NSIS_INSTALLED_ICON_NAME "bin/i2pd.exe")
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set(CPACK_NSIS_HELP_LINK "https:\\\\\\\\github.com\\\\PurpleI2P\\\\i2pd\\\\issues")
set(CPACK_NSIS_URL_INFO_ABOUT "https:\\\\\\\\github.com\\\\PurpleI2P\\\\i2pd")
set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Install i2pd as windows service.lnk' '$INSTDIR\\\\bin\\\\i2pd.exe' '--service=install'
CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Remove i2pd windows service.lnk' '$INSTDIR\\\\bin\\\\i2pd.exe' '--service=remove'")
set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\Install i2pd as windows service.lnk'
Delete '$SMPROGRAMS\\\\$START_MENU\\\\Remove i2pd windows service.lnk'")
else()
set(CPACK_STRIP_FILES "bin/i2pd")
set(CPACK_SOURCE_STRIP_FILES "")
if(BUILD_TESTING)
add_subdirectory(${CMAKE_SOURCE_DIR}/tests ${CMAKE_CURRENT_BINARY_DIR}/tests)
endif()
set(CPACK_PACKAGE_EXECUTABLES "i2pd" "C++ I2P daemon")
set(CPACK_SOURCE_GENERATOR "TGZ")
include(CPack)

@ -2,57 +2,105 @@
setlocal enableextensions enabledelayedexpansion
title Building i2pd
REM Copyright (c) 2013-2017, The PurpleI2P Project
REM Copyright (c) 2013-2022, The PurpleI2P Project
REM This file is part of Purple i2pd project and licensed under BSD3
REM See full license text in LICENSE file at top of project tree
REM To use that script, you must have installed in your MSYS installation these packages:
REM Base: git make zip
REM x86_64: mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-gcc
REM i686: mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-gcc
REM UCRT64: mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-openssl mingw-w64-ucrt-x86_64-gcc
REM MINGW32: mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-gcc
REM setting up variables for MSYS
REM Note: if you installed MSYS64 to different path, edit WD variable (only C:\msys64 needed to edit)!
set "WD=C:\msys64\usr\bin\"
REM Note: if you installed MSYS64 to different path, edit WD variable (only C:\msys64 needed to edit)
set MSYS2_PATH_TYPE=inherit
set CHERE_INVOKING=enabled_from_arguments
REM set MSYSTEM=MSYS
set MSYSTEM=MINGW32
set "WD=C:\msys64\usr\bin\"
set "xSH=%WD%bash -lc"
REM detecting number of processors and subtract 1.
set /a threads=%NUMBER_OF_PROCESSORS%-1
set "FILELIST=i2pd.exe README.txt contrib/i2pd.conf contrib/tunnels.conf contrib/certificates contrib/tunnels.d contrib/webconsole"
REM detecting number of processors
set /a threads=%NUMBER_OF_PROCESSORS%
REM we must work in root of repo
cd ..
REM deleting old log files
del /S build_*.log >> nul
del /S build_*.log >> nul 2>&1
echo Receiving latest commit and cleaning up...
%xSH% "git pull && make clean" > build/build_git.log 2>&1
echo.
%xSH% "git checkout contrib/* && git pull && make clean" > build\build.log 2>&1
REM set to variable current commit hash
FOR /F "usebackq" %%a IN (`%xSH% 'git describe --tags'`) DO (
for /F "usebackq" %%a in (`%xSH% "git describe --tags"`) DO (
set tag=%%a
)
REM set to variable latest released tag
for /F "usebackq" %%b in (`%xSH% "git describe --abbrev=0"`) DO (
set reltag=%%b
)
echo Preparing configuration files and README for packaging...
%xSH% "echo To use configs and certificates, move all files and certificates folder from contrib directory here. > README.txt" >> nul
REM converting configuration files to DOS format (make usable in Windows Notepad)
%xSH% "unix2dos contrib/i2pd.conf contrib/tunnels.conf contrib/tunnels.d/* contrib/webconsole/style.css" >> build\build.log 2>&1
REM Prepare binary signing command if signing key and password provided
if defined SIGN (
echo Signing enabled
for %%X in (signtool.exe) do (set xSIGNTOOL=%%~$PATH:X)
if not defined xSIGNTOOL (
if not defined SIGNTOOL (
echo Error: Can't find signtool. Please provide path to binary using SIGNTOOL variable.
exit /b 1
) else (
set "xSIGNTOOL=%SIGNTOOL%"
)
)
if defined SIGNKEY (
set "xSIGNKEYOPTS=/f ^"%SIGNKEY%^""
)
if defined SIGNPASS (
set "xSIGNPASSOPTS=/p ^"%SIGNPASS%^""
)
set "xSIGNOPTS=sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 %xSIGNKEYOPTS% %xSIGNPASSOPTS%"
)
REM starting building
set MSYSTEM=MINGW32
set bitness=32
call :BUILDING
echo.
set MSYSTEM=MINGW64
set MSYSTEM=UCRT64
set bitness=64
call :BUILDING
REM build for Windows XP
if exist C:\msys64-xp\ ( call :BUILDING_XP )
echo.
del README.txt >> nul
REM compile installer
echo Building installer...
C:\PROGRA~2\INNOSE~1\ISCC.exe /dI2Pd_TextVer="%tag%" /dI2Pd_Ver="%reltag%.0" build\win_installer.iss >> build\build.log 2>&1
REM Sign binary
if defined xSIGNOPTS (
"%xSIGNTOOL%" %xSIGNOPTS% build\setup_i2pd_v%tag%.exe
)
%xSH% "git checkout contrib/*" >> build\build.log 2>&1
del README.txt i2pd_x32.exe i2pd_x64.exe i2pd_xp.exe >> nul
echo Build complete...
pause
@ -60,14 +108,42 @@ exit /b 0
:BUILDING
%xSH% "make clean" >> nul
echo Building i2pd %tag% for win%bitness%:
echo Build AVX+AESNI...
%xSH% "make DEBUG=no USE_UPNP=yes USE_AVX=1 USE_AESNI=1 -j%threads% && zip -r9 build/i2pd_%tag%_win%bitness%_mingw_avx_aesni.zip i2pd.exe README.txt contrib/i2pd.conf contrib/tunnels.conf contrib/certificates && make clean" > build/build_win%bitness%_avx_aesni.log 2>&1
echo Build AVX...
%xSH% "make DEBUG=no USE_UPNP=yes USE_AVX=1 -j%threads% && zip -r9 build/i2pd_%tag%_win%bitness%_mingw_avx.zip i2pd.exe README.txt contrib/i2pd.conf contrib/tunnels.conf contrib/certificates && make clean" > build/build_win%bitness%_avx.log 2>&1
echo Build AESNI...
%xSH% "make DEBUG=no USE_UPNP=yes USE_AESNI=1 -j%threads% && zip -r9 build/i2pd_%tag%_win%bitness%_mingw_aesni.zip i2pd.exe README.txt contrib/i2pd.conf contrib/tunnels.conf contrib/certificates && make clean" > build/build_win%bitness%_aesni.log 2>&1
echo Build without extensions...
%xSH% "make DEBUG=no USE_UPNP=yes -j%threads% && zip -r9 build/i2pd_%tag%_win%bitness%_mingw.zip i2pd.exe README.txt contrib/i2pd.conf contrib/tunnels.conf contrib/certificates && make clean" > build/build_win%bitness%.log 2>&1
:EOF
echo Building i2pd %tag% for win%bitness%...
REM Build i2pd
%xSH% "make DEBUG=no USE_UPNP=yes -j%threads%" > build\build_win%bitness%_%tag%.log 2>&1
REM Sign binary
if defined xSIGNOPTS (
"%xSIGNTOOL%" %xSIGNOPTS% i2pd.exe
)
REM Copy binary for installer and create distribution archive
%xSH% "cp i2pd.exe i2pd_x%bitness%.exe && zip -r9 build/i2pd_%tag%_win%bitness%_mingw.zip %FILELIST%" >> build\build_win%bitness%_%tag%.log 2>&1
REM Clean work directory
%xSH% "make clean" >> build\build_win%bitness%_%tag%.log 2>&1
goto EOF
:BUILDING_XP
set MSYSTEM=MINGW32
set bitness=32
set "WD=C:\msys64-xp\usr\bin\"
set "xSH=%WD%bash -lc"
%xSH% "make clean" >> nul
echo Building i2pd %tag% for winxp...
%xSH% "make DEBUG=no USE_UPNP=yes USE_WINXP_FLAGS=yes -j%threads%" > build\build_winxp_%tag%.log 2>&1
REM Sign binary
if defined xSIGNOPTS (
"%xSIGNTOOL%" %xSIGNOPTS% i2pd.exe
)
REM Copy binary for installer and create distribution archive
%xSH% "cp i2pd.exe i2pd_xp.exe && zip -r9 build/i2pd_%tag%_winxp_mingw.zip %FILELIST%" >> build\build_winxp_%tag%.log 2>&1
REM Clean work directory
%xSH% "make clean" >> build\build_winxp_%tag%.log 2>&1
goto EOF
:EOF

@ -1,10 +0,0 @@
--- CMakeLists.txt.orig 2015-12-07 14:19:36.447689600 -0600
+++ CMakeLists.txt 2015-12-07 14:18:23.004419900 -0600
@@ -165,6 +165,7 @@
ENABLE_LANGUAGE(ASM_MASM)
set(ZLIB_ASMS
contrib/masmx64/gvmat64.asm
+ contrib/masmx64/inffas8664.c
contrib/masmx64/inffasx64.asm
)
endif()

@ -1,28 +0,0 @@
--- CMakeLists.txt.orig 2013-04-28 17:57:10.000000000 -0500
+++ CMakeLists.txt 2015-12-03 12:53:52.371087900 -0600
@@ -7,6 +7,7 @@
option(ASM686 "Enable building i686 assembly implementation")
option(AMD64 "Enable building amd64 assembly implementation")
+option(WITH_STATIC "Static runtime on Windows" OFF)
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
@@ -66,6 +67,17 @@
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
endif()
+if(WITH_STATIC AND (MSVC OR MSYS))
+ # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace
+ foreach(flag_var
+ CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+ CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
+ if(${flag_var} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif(${flag_var} MATCHES "/MD")
+ endforeach(flag_var)
+endif()
+
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# If we're doing an out of source build and the user has a zconf.h
# in their source tree...

@ -1,18 +1,23 @@
# atomic builtins are required for threading support.
INCLUDE(CheckCXXSourceCompiles)
INCLUDE(CheckLibraryExists)
# Sometimes linking against libatomic is required for atomic ops, if
# the platform doesn't support lock-free atomics.
function(check_working_cxx_atomics varname)
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "-std=c++11")
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
CHECK_CXX_SOURCE_COMPILES("
#include <atomic>
std::atomic<int> x;
std::atomic<short> y;
std::atomic<char> z;
int main() {
return x;
++z;
++y;
return ++x;
}
" ${varname})
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
@ -27,6 +32,7 @@ function(check_working_cxx_atomics64 varname)
std::atomic<uint64_t> x (0);
int main() {
uint64_t i = x.load(std::memory_order_relaxed);
(void)i;
return 0;
}
" ${varname})
@ -34,15 +40,16 @@ int main() {
endfunction(check_working_cxx_atomics64)
# This isn't necessary on MSVC, so avoid command-line switch annoyance
# by only running on GCC-like hosts.
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
# Check for (non-64-bit) atomic operations.
if(MSVC)
set(HAVE_CXX_ATOMICS_WITHOUT_LIB True)
else()
# First check if atomics work without the library.
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
# If not, check if the library exists, and atomics work with it.
if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
if( HAVE_LIBATOMIC )
if(HAVE_LIBATOMIC)
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
@ -58,20 +65,20 @@ endif()
if(MSVC)
set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True)
else()
# First check if atomics work without the library.
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
endif()
# If not, check if the library exists, and atomics work with it.
if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
if(HAVE_CXX_LIBATOMICS64)
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
message(FATAL_ERROR "Host compiler must support std::atomic!")
# If not, check if the library exists, and atomics work with it.
if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
if(HAVE_CXX_LIBATOMICS64)
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!")
endif()
else()
message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
endif()
else()
message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
endif()
endif()
@ -80,7 +87,6 @@ endif()
## assumes C++11 <atomic> works.
CHECK_CXX_SOURCE_COMPILES("
#ifdef _MSC_VER
#include <Intrin.h> /* Workaround for PR19898. */
#include <windows.h>
#endif
int main() {

@ -0,0 +1,55 @@
# - Try to find the CHECK libraries
# Once done this will define
#
# CHECK_FOUND - system has check
# CHECK_INCLUDE_DIRS - the check include directory
# CHECK_LIBRARIES - check library
#
# Copyright (c) 2007 Daniel Gollub <gollub@b1-systems.de>
# Copyright (c) 2007-2009 Bjoern Ricks <bjoern.ricks@gmail.com>
#
# Redistribution and use is allowed according to the terms of the New
# BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
INCLUDE( FindPkgConfig )
IF ( Check_FIND_REQUIRED )
SET( _pkgconfig_REQUIRED "REQUIRED" )
ELSE( Check_FIND_REQUIRED )
SET( _pkgconfig_REQUIRED "" )
ENDIF ( Check_FIND_REQUIRED )
IF ( CHECK_MIN_VERSION )
PKG_SEARCH_MODULE( CHECK ${_pkgconfig_REQUIRED} check>=${CHECK_MIN_VERSION} )
ELSE ( CHECK_MIN_VERSION )
PKG_SEARCH_MODULE( CHECK ${_pkgconfig_REQUIRED} check )
ENDIF ( CHECK_MIN_VERSION )
# Look for CHECK include dir and libraries
IF( NOT CHECK_FOUND AND NOT PKG_CONFIG_FOUND )
FIND_PATH( CHECK_INCLUDE_DIRS check.h )
FIND_LIBRARY( CHECK_LIBRARIES NAMES check )
IF ( CHECK_INCLUDE_DIRS AND CHECK_LIBRARIES )
SET( CHECK_FOUND 1 )
IF ( NOT Check_FIND_QUIETLY )
MESSAGE ( STATUS "Found CHECK: ${CHECK_LIBRARIES}" )
ENDIF ( NOT Check_FIND_QUIETLY )
ELSE ( CHECK_INCLUDE_DIRS AND CHECK_LIBRARIES )
IF ( Check_FIND_REQUIRED )
MESSAGE( FATAL_ERROR "Could NOT find CHECK" )
ELSE ( Check_FIND_REQUIRED )
IF ( NOT Check_FIND_QUIETLY )
MESSAGE( STATUS "Could NOT find CHECK" )
ENDIF ( NOT Check_FIND_QUIETLY )
ENDIF ( Check_FIND_REQUIRED )
ENDIF ( CHECK_INCLUDE_DIRS AND CHECK_LIBRARIES )
ENDIF( NOT CHECK_FOUND AND NOT PKG_CONFIG_FOUND )
# Hide advanced variables from CMake GUIs
MARK_AS_ADVANCED( CHECK_INCLUDE_DIRS CHECK_LIBRARIES )

@ -0,0 +1,284 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the working tree (--dirty option),
# and adjusting the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# git_local_changes(<var>)
#
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
# Uses the return code of "git diff-index --quiet HEAD --".
# Does not regard untracked files.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
# http://academic.cleardefinition.com
#
# Copyright 2009-2013, Iowa State University.
# Copyright 2013-2020, Ryan Pavlik
# Copyright 2013-2020, Contributors
# SPDX-License-Identifier: BSL-1.0
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
# Function _git_find_closest_git_dir finds the next closest .git directory
# that is part of any directory in the path defined by _start_dir.
# The result is returned in the parent scope variable whose name is passed
# as variable _git_dir_var. If no .git directory can be found, the
# function returns an empty string via _git_dir_var.
#
# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
# neither foo nor bar contain a file/directory .git. This wil return
# C:/bla/.git
#
function(_git_find_closest_git_dir _start_dir _git_dir_var)
set(cur_dir "${_start_dir}")
set(git_dir "${_start_dir}/.git")
while(NOT EXISTS "${git_dir}")
# .git dir not found, search parent directories
set(git_previous_parent "${cur_dir}")
get_filename_component(cur_dir "${cur_dir}" DIRECTORY)
if(cur_dir STREQUAL git_previous_parent)
# We have reached the root directory, we are not in git
set(${_git_dir_var}
""
PARENT_SCOPE)
return()
endif()
set(git_dir "${cur_dir}/.git")
endwhile()
set(${_git_dir_var}
"${git_dir}"
PARENT_SCOPE)
endfunction()
function(get_git_head_revision _refspecvar _hashvar)
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
else()
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
endif()
if(NOT "${GIT_DIR}" STREQUAL "")
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
"${GIT_DIR}")
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
# We've gone above the CMake root dir.
set(GIT_DIR "")
endif()
endif()
if("${GIT_DIR}" STREQUAL "")
set(${_refspecvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
set(${_hashvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
return()
endif()
# Check if the current source dir is a git submodule or a worktree.
# In both cases .git is a file instead of a directory.
#
if(NOT IS_DIRECTORY ${GIT_DIR})
# The following git command will return a non empty string that
# points to the super project working tree if the current
# source dir is inside a git submodule.
# Otherwise the command will return an empty string.
#
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse
--show-superproject-working-tree
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT "${out}" STREQUAL "")
# If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
${submodule})
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
ABSOLUTE)
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
else()
# GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
file(READ ${GIT_DIR} worktree_ref)
# The .git directory contains a path to the worktree information directory
# inside the parent git repo of the worktree.
#
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
${worktree_ref})
string(STRIP ${git_worktree_dir} git_worktree_dir)
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
endif()
else()
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake" @ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar}
"${HEAD_REF}"
PARENT_SCOPE)
set(${_hashvar}
"${HEAD_HASH}"
PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_describe_working_tree _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_local_changes _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(res EQUAL 0)
set(${_var}
"CLEAN"
PARENT_SCOPE)
else()
set(${_var}
"DIRTY"
PARENT_SCOPE)
endif()
endfunction()

@ -0,0 +1,43 @@
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright 2009-2012, Iowa State University
# Copyright 2011-2015, Contributors
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# SPDX-License-Identifier: BSL-1.0
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()

@ -1,16 +1,30 @@
# Copyright (c) 2017-2023, The PurpleI2P Project
# This file is part of Purple i2pd project and licensed under BSD3
# See full license text in LICENSE file at top of project tree
# Based on the Qt 5 processor detection code, so should be very accurate
# https://qt.gitorious.org/qt/qtbase/blobs/master/src/corelib/global/qprocessordetection.h
# Currently handles arm (v5, v6, v7), x86 (32/64), ia64, and ppc (32/64)
# https://github.com/qt/qtbase/blob/dev/src/corelib/global/qprocessordetection.h
# Currently handles arm (v5, v6, v7, v8), x86 (32/64), ia64, mips (32/64, mipsel, mips64el) and ppc (32/64)
# Regarding POWER/PowerPC, just as is noted in the Qt source,
# "There are many more known variants/revisions that we do not handle/detect."
set(archdetect_c_code "
#if defined(__arm__) || defined(__TARGET_ARCH_ARM)
#if defined(__ARM_ARCH_7__) \\
#if defined(__arm__) || defined(__TARGET_ARCH_ARM)|| defined(_M_ARM) || defined(_M_ARM64) || defined(__aarch64__) || defined(__ARM64__)
#if defined(__ARM64_ARCH_8__) \\
|| defined(__aarch64__) \\
|| defined(__ARMv8__) \\
|| defined(__ARMv8_A__) \\
|| defined(_M_ARM64) \\
|| (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 8)
#error cmake_ARCH arm64
#elif defined(__ARM_ARCH_7__) \\
|| defined(__ARM_ARCH_7A__) \\
|| defined(__ARM_ARCH_7R__) \\
|| defined(__ARM_ARCH_7M__) \\
|| defined(__ARM_ARCH_7S__) \\
|| defined(_ARM_ARCH_7) \\
|| defined(__CORE_CORTEXA__) \\
|| (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 7)
#error cmake_ARCH armv7
#elif defined(__ARM_ARCH_6__) \\
@ -23,6 +37,7 @@ set(archdetect_c_code "
|| (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 6)
#error cmake_ARCH armv6
#elif defined(__ARM_ARCH_5TEJ__) \\
|| defined(__ARM_ARCH_5TE__) \\
|| (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5)
#error cmake_ARCH armv5
#else
@ -34,7 +49,19 @@ set(archdetect_c_code "
#error cmake_ARCH x86_64
#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
#error cmake_ARCH ia64
#elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) \\
#elif defined(__mips) || defined(__mips__) || defined(_M_MRX000)
#if defined(_MIPS_ARCH_MIPS64) || defined(__mips64)
#if defined(__MIPSEL__)
#error cmake_ARCH mips64el
#else
#error cmake_ARCH mips64
#endif
#elif defined(__MIPSEL__)
#error cmake_ARCH mipsel
#else
#error cmake_ARCH mips
#endif
#elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) || defined(__POWERPC__) \\
|| defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) \\
|| defined(_M_MPPC) || defined(_M_PPC)
#if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__)
@ -47,7 +74,7 @@ set(archdetect_c_code "
#error cmake_ARCH unknown
")
# Set ppc_support to TRUE before including this file or ppc and ppc64
# Set ppc_support to TRUE before including this file on ppc and ppc64
# will be treated as invalid architectures since they are no longer supported by Apple
function(target_architecture output_var)
@ -56,23 +83,25 @@ function(target_architecture output_var)
# First let's normalize the order of the values
# Note that it's not possible to compile PowerPC applications if you are using
# the OS X SDK version 10.6 or later - you'll need 10.4/10.5 for that, so we
# disable it by default
# the OS X SDK version 10.7 or later - you'll need 10.4/10.5/10.6 for that, so we
# disable it by default. Also, ppc64 is not supported in 10.6.
# See this page for more information:
# http://stackoverflow.com/questions/5333490/how-can-we-restore-ppc-ppc64-as-well-as-full-10-4-10-5-sdk-support-to-xcode-4
# Architecture defaults to i386 or ppc on OS X 10.5 and earlier, depending on the CPU type detected at runtime.
# On OS X 10.6+ the default is x86_64 if the CPU supports it, i386 otherwise.
# On OS X 10.6+ the default is x86_64 if the CPU supports it, i386 otherwise; 10.6 also supports ppc.
foreach(osx_arch ${CMAKE_OSX_ARCHITECTURES})
if("${osx_arch}" STREQUAL "ppc" AND ppc_support)
set(osx_arch_ppc TRUE)
elseif("${osx_arch}" STREQUAL "ppc64" AND ppc_support)
set(osx_arch_ppc64 TRUE)
elseif("${osx_arch}" STREQUAL "i386")
set(osx_arch_i386 TRUE)
elseif("${osx_arch}" STREQUAL "x86_64")
set(osx_arch_x86_64 TRUE)
elseif("${osx_arch}" STREQUAL "ppc64" AND ppc_support)
set(osx_arch_ppc64 TRUE)
elseif("${osx_arch}" STREQUAL "arm64")
set(osx_arch_arm64 TRUE)
else()
message(FATAL_ERROR "Invalid OS X arch name: ${osx_arch}")
endif()
@ -83,6 +112,10 @@ function(target_architecture output_var)
list(APPEND ARCH ppc)
endif()
if(osx_arch_ppc64)
list(APPEND ARCH ppc64)
endif()
if(osx_arch_i386)
list(APPEND ARCH i386)
endif()
@ -91,8 +124,8 @@ function(target_architecture output_var)
list(APPEND ARCH x86_64)
endif()
if(osx_arch_ppc64)
list(APPEND ARCH ppc64)
if(osx_arch_arm64)
list(APPEND ARCH arm64)
endif()
else()
file(WRITE "${CMAKE_BINARY_DIR}/arch.c" "${archdetect_c_code}")
@ -100,11 +133,11 @@ function(target_architecture output_var)
enable_language(C)
# Detect the architecture in a rather creative way...
# This compiles a small C program which is a series of ifdefs that selects a
# particular #error preprocessor directive whose message string contains the
# target architecture. The program will always fail to compile (both because
# file is not a valid C program, and obviously because of the presence of the
# #error preprocessor directives... but by exploiting the preprocessor in this
# This compiles a small C program which is a series of ifdefs that selects
# a particular #error preprocessor directive whose message string contains
# the target architecture. The program will always fail to compile (both because
# file is not a valid C program, and obviously because of the presence of
# the #error preprocessor directives... but by exploiting the preprocessor in this
# way, we can detect the correct target architecture even when cross-compiling,
# since the program itself never needs to be run (only the compiler/preprocessor)
try_run(

@ -0,0 +1,16 @@
# read version
function(set_version version_file output_var)
file(READ "${version_file}" version_data)
string(REGEX MATCH "I2PD_VERSION_MAJOR ([0-9]*)" _ ${version_data})
set(version_major ${CMAKE_MATCH_1})
string(REGEX MATCH "I2PD_VERSION_MINOR ([0-9]*)" _ ${version_data})
set(version_minor ${CMAKE_MATCH_1})
string(REGEX MATCH "I2PD_VERSION_MICRO ([0-9]*)" _ ${version_data})
set(version_micro ${CMAKE_MATCH_1})
set(${output_var} "${version_major}.${version_minor}.${version_micro}" PARENT_SCOPE)
endfunction()

@ -1,34 +0,0 @@
Howto build & run
==================
**Build**
Assuming you're in the root directory of the anoncoin source code.
$ `cd build/docker`
$ `docker -t meeh/i2pd:latest .`
**Run**
To run either the local build, or if not found - fetched prebuild from hub.docker.io, run the following command.
$ `docker run --name anonnode -v /path/to/i2pd/datadir/on/host:/var/lib/i2pd -p 7070:7070 -p 4444:4444 -p 4447:4447 -p 7656:7656 -p 2827:2827 -p 7654:7654 -p 7650:7650 -d meeh/i2pd`
All the ports ( -p HOSTPORT:DOCKERPORT ) is optional. However the command above enable all features (Webconsole, HTTP Proxy, BOB, SAM, i2cp, etc)
The volume ( -v HOSTDIR:DOCKERDIR ) is also optional, but if you don't use it, your config, routerid and private keys will die along with the container.
**Options**
Options are set via docker environment variables. This can be set at run with -e parameters.
* **ENABLE_IPV6** - Enable IPv6 support. Any value can be used - it triggers as long as it's not empty.
* **LOGLEVEL** - Set the loglevel.
* **ENABLE_AUTH** - Enable auth for the webconsole. Username and password needs to be set manually in i2pd.conf cause security reasons.
**Logging**
Logging happens to STDOUT as the best practise with docker containers, since infrastructure systems like kubernetes with ELK integration can automatically forward the log to say, kibana or greylog without manual setup. :)

@ -1,11 +0,0 @@
FROM ubuntu
RUN apt-get update && apt-get install -y libboost-dev libboost-filesystem-dev \
libboost-program-options-dev libboost-date-time-dev \
libssl-dev git build-essential
RUN git clone https://github.com/PurpleI2P/i2pd.git
WORKDIR /i2pd
RUN make
CMD ./i2pd

@ -1,2 +0,0 @@
i2pd:
build: .

@ -1,37 +1,50 @@
#define I2Pd_AppName "i2pd"
#define I2Pd_ver "2.21.0"
#define I2Pd_Publisher "PurpleI2P"
[Setup]
AppName={#I2Pd_AppName}
AppVersion={#I2Pd_ver}
AppVersion={#I2Pd_TextVer}
AppPublisher={#I2Pd_Publisher}
DefaultDirName={pf}\I2Pd
DefaultGroupName=I2Pd
UninstallDisplayIcon={app}\I2Pd.exe
OutputDir=.
LicenseFile=../LICENSE
OutputBaseFilename=setup_{#I2Pd_AppName}_v{#I2Pd_ver}
SetupIconFile=mask.ico
OutputBaseFilename=setup_{#I2Pd_AppName}_v{#I2Pd_TextVer}
LicenseFile=..\LICENSE
SetupIconFile=..\Win32\mask.ico
InternalCompressLevel=ultra64
Compression=lzma/ultra64
SolidCompression=true
ArchitecturesInstallIn64BitMode=x64
AppVerName={#I2Pd_AppName}
ExtraDiskSpaceRequired=15
AppID={{621A23E0-3CF4-4BD6-97BC-4835EA5206A2}
AppVerName={#I2Pd_AppName}
AppCopyright=Copyright (c) 2013-2022, The PurpleI2P Project
AppPublisherURL=http://i2pd.website/
AppSupportURL=https://github.com/PurpleI2P/i2pd/issues
AppUpdatesURL=https://github.com/PurpleI2P/i2pd/releases
VersionInfoProductVersion={#I2Pd_Ver}
VersionInfoVersion={#I2Pd_Ver}
CloseApplications=yes
[Files]
Source: ..\i2pd_x86.exe; DestDir: {app}; DestName: i2pd.exe; Flags: ignoreversion; Check: not IsWin64
Source: ..\i2pd_x64.exe; DestDir: {app}; DestName: i2pd.exe; Flags: ignoreversion; Check: IsWin64
Source: ..\i2pd_x32.exe; DestDir: {app}; DestName: i2pd.exe; Flags: ignoreversion; Check: not IsWin64; MinVersion: 6.0
Source: ..\i2pd_x64.exe; DestDir: {app}; DestName: i2pd.exe; Flags: ignoreversion; Check: IsWin64; MinVersion: 6.0
Source: ..\i2pd_xp.exe; DestDir: {app}; DestName: i2pd.exe; Flags: ignoreversion; Check: IsWin64; OnlyBelowVersion: 6.0
Source: ..\README.md; DestDir: {app}; DestName: Readme.txt; Flags: onlyifdoesntexist
Source: ..\contrib\i2pd.conf; DestDir: {userappdata}\i2pd; Flags: onlyifdoesntexist
Source: ..\contrib\subscriptions.txt; DestDir: {userappdata}\i2pd; Flags: onlyifdoesntexist
Source: ..\contrib\tunnels.conf; DestDir: {userappdata}\i2pd; Flags: onlyifdoesntexist
Source: ..\contrib\certificates\*; DestDir: {userappdata}\i2pd\certificates; Flags: onlyifdoesntexist recursesubdirs createallsubdirs
Source: ..\contrib\tunnels.d\*; DestDir: {userappdata}\i2pd\tunnels.d; Flags: onlyifdoesntexist recursesubdirs createallsubdirs
Source: ..\contrib\webconsole\*; DestDir: {userappdata}\i2pd\webconsole; Flags: onlyifdoesntexist recursesubdirs createallsubdirs
[Icons]
Name: {group}\I2Pd; Filename: {app}\i2pd.exe

@ -0,0 +1,42 @@
# _________________________________________
# / Copy this file to the right location \
# | then load with: |
# | |
# | apparmor_parser -r -W |
# | /etc/apparmor.d/docker-i2pd |
# | |
# | docker run --security-opt |
# | "apparmor=docker-i2pd" ... |
# | purplei2p/i2pd |
# | |
# \ And "aa-status" to verify it's loaded. /
# -----------------------------------------
# \ ^__^
# \ (oo)\_______
# (__)\ )\/\
# ||----w |
# || ||
#include <tunables/global>
profile docker-i2pd flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
#include <abstractions/openssl>
#include <abstractions/nameservice>
/bin/busybox ix,
/usr/local/bin/i2pd ix,
/entrypoint.sh ixr,
/i2pd_certificates/** r,
/home/i2pd/data/** rw,
/home/i2pd/data/i2pd.pid k,
deny /home/i2pd/data/i2pd.conf w,
deny /home/i2pd/data/tunnels.conf w,
deny /home/i2pd/data/tunnels.d/** w,
deny /home/i2pd/data/certificates/** w,
deny /home/i2pd/data/i2pd.log r,
}

@ -4,33 +4,22 @@
#
#include <tunables/global>
/usr/sbin/i2pd {
profile i2pd /{usr/,}sbin/i2pd {
#include <abstractions/base>
network inet dgram,
network inet stream,
network inet6 dgram,
network inet6 stream,
network netlink raw,
/etc/gai.conf r,
/etc/host.conf r,
/etc/hosts r,
/etc/nsswitch.conf r,
/etc/resolv.conf r,
/run/resolvconf/resolv.conf r,
/run/systemd/resolve/stub-resolv.conf r,
#include <abstractions/openssl>
#include <abstractions/nameservice>
# path specific (feel free to modify if you have another paths)
/etc/i2pd/** r,
/run/i2pd/i2pd.pid rwk,
/var/lib/i2pd/** rw,
/var/log/i2pd/i2pd.log w,
/var/run/i2pd/i2pd.pid rwk,
/usr/sbin/i2pd mr,
/usr/share/i2pd/** r,
/{var/,}run/i2pd/i2pd.pid rwk,
/{usr/,}sbin/i2pd mr,
@{system_share_dirs}/i2pd/** r,
# user homedir (if started not by init.d or systemd)
owner @{HOME}/.i2pd/ rw,
owner @{HOME}/.i2pd/** rwk,
#include if exists <local/usr.sbin.i2pd>
}

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICKDCCAc6gAwIBAgIUcPHZXtYSqGNRCD6z8gp79WUFtI0wCgYIKoZIzj0EAwIw
gZMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGlu
MRgwFgYDVQQKDA9TdG9ybXlDbG91ZCBJbmMxIzAhBgNVBAMMGnN0b3JteWNsb3Vk
LmZhbWlseS5pMnAubmV0MSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBzdG9ybXljbG91
ZC5vcmcwHhcNMjIwMzE5MTU1MjU2WhcNMzIwMzE2MTU1MjU2WjCBkzELMAkGA1UE
BhMCVVMxDjAMBgNVBAgMBVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xGDAWBgNVBAoM
D1N0b3JteUNsb3VkIEluYzEjMCEGA1UEAwwac3Rvcm15Y2xvdWQuZmFtaWx5Lmky
cC5uZXQxJDAiBgkqhkiG9w0BCQEWFWFkbWluQHN0b3JteWNsb3VkLm9yZzBZMBMG
ByqGSM49AgEGCCqGSM49AwEHA0IABFUli0hvJEmowNjJVjbKEIWBJhqe973S4VdL
cJuA5yY3dC4Y998abWEox7/Y1BhnBbpJuiodA341bXKkLMXQy/kwCgYIKoZIzj0E
AwIDSAAwRQIgD12F/TfY3iV1/WDF7BSKgbD5g2MfELUIy1dtUlJQuJUCIQD69mZw
V1Z9j2x0ZsuirS3i6AMfVyTDj0RFS3U1jeHzIQ==
-----END CERTIFICATE-----

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEctG1gDANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQYWNldG9uZUBtYWls
LmkycDAeFw0yMTAxMjUxMDMyMjBaFw0zMTAxMjMxMDMyMjBaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBhY2V0b25lQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqF/BRRmvZ54
5XArgxbytDi7m7MDjFE/whUADruHj/9jXGCxE8DDiiKTt3yhfakV0SNo5xk7AMD+
wqiSNC5JCHTm18gd2M4cQLIaOVRqucLLge4XVgk2WPX6OT98wfxh7mqA3wlSdEpj
dY3Txtkf7VfZLicG76/RBtLFW3aBdsn63hZaQqZE4x/5MJyPVZx59+lys5RmMi0o
LpXJy4HOu1/Gl1iKDJoI/ARFG3y7uP/B+ZtZBitJetTs0HcqycnNJq0tVZf2HiGF
JNy67AL4foxNYPXP6QsvXvp6LRpGANaBCkFCBlriSF+x1zO2H3uAkRnuLYXuKIfB
HudejTp4R57VgZGiHYoawHaF17FVAApue9G8O82XYECjhET35B9yFoOBHTvaMxLU
CKrmayH8KMQon95mfe1qpoO3/YDa8DCxkjAfjdtytat7nt2pGZMH6/cLJxcFiofh
RtRVvb+omv/X12j/6iCFrwP4NvBnAZsa736igbjpyee5n+CSyYxd9cJkRX1vQVk7
WFSqL58Pz+g6CKJmdMPvqNOfUQ6mieBeejmx35B4pLzLcoNxw8R3O1+I2l4dg042
dEydKRQNwdzOec4jYwnKR40iwIyZxpchXWGRbBdyF5RQCbIIo60QBJlfXMJ2svan
q5lYIeWeY3mlODXu4KH4K09y10KT8FsCAwEAAaMhMB8wHQYDVR0OBBYEFMh+DoIL
APNiu2o+6I9A49joNYQuMA0GCSqGSIb3DQEBDQUAA4ICAQBFeOJi0rmkqN5/E3IB
nE2x4mUeLI82tUcN2D3Yu8J81vy4DnH+oMRQFDtYEHW5pfirRmgSZ7MQwYQnqWLp
iTE7SyCxlqGrmVsYp7PzfS1pUT2QeWPtsNYUDdraG0Zr9BkIGB60VMhjMSa9WUrj
lbchzr6E/j/EsEOE7IK08JxIDKCDZM2LLwis4tAM6tmiylkMf2RlUBIRBs1TCO+q
x3yByttNE2P4nQyQVQpjc1qsaOMvJvbxun37dwo+oTQy+hwkA86BWTDRYdN3xwOk
OfAOtlX6zM/wCKMN0ZRnjZoh59ZCn4JXokt3IjZ4n8qJOuJFRKeKGmGeKA8uaGW8
ih5tdB99Gu5Z8LOT1FxAJKwQBn5My0JijPoMit4B0WKNC8hy2zc2YvNfflu1ZRj5
wF4E5ktbtT/LWFSoRPas/GFS8wSXk/kbSB0ArDcRRszb3JHqbALmSQxngz3rfwb3
SHwQIIg956gjMDueEX5CrGrMqigiK53b9fqtpghUrHDsqtEXqeImpAY65PX1asqo
metDNuETHF7XrAjP7TGJfnrYQyeK90iS7j1G68ScBGkKY2nsTnFoXkSk5s5D338E
SUzPaOlh91spmkVY6gQTVQ7BakADBHw+zBgDA1gBN/4JPvgN36hquj63+aG1cKy3
3ZUnv2ipo2fpr69NtuBnutK6gw==
-----END CERTIFICATE-----

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF1zCCA7+gAwIBAgIRAMDqFR09Xuj8ZUu+oetSvAEwDQYJKoZIhvcNAQELBQAw
dTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxHjAcBgNVBAMM
FWFkbWluQHN0b3JteWNsb3VkLm9yZzAeFw0yNDAxMjUxNDE1MzBaFw0zNDAxMjUx
NDE1MzBaMHUxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgx
HjAcBgNVBAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMR4w
HAYDVQQDDBVhZG1pbkBzdG9ybXljbG91ZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDbGX+GikPzQXr9zvkrhfO9g0l49KHLNQhUKYqd6T+PfnGo
Fm0d3ZZVVQZ045vWgroOXDGGZZWxUIlb2inRaR2DF1TxN3pPYt59RgY9ZQ9+TL7o
isY91krCRygY8EcAmHIjlfZQ9dBVcL7CfyT0MYZA5Efee9+NDHSewTfQP9T2faIE
83Fcyd93a2mIHYjKUbJnojng/wgsy8srbsEuuTok4MIQmDj+B5nz+za2FgI0/ydh
srlMt4aGJF4/DIem9z9d0zBCOkwrmtFIzjNF1mOSA8ES4m5YnKA/y9rZlRidLPGu
prbXhPVnqHeOnHMz2QCw1wbVo504kl0bMqyEz2tVWsO9ep7iZoQs2xkFAEaegYNT
QLUpwVGlyuq3wXXwopFRffOSimGSazICwWI6j+K0pOtgefNJaWrqKYvtkj1SbK2L
LBNUIENz6VnB7KPRckuX6zxC8PpOiBK9BcftfO+xAz/wC6qq3riBPw30KKSym0nC
Zp5KciDn4Phtw9PGq8Bkl8SyWl0jtFnfTB1tzJkisf2qKcNHaFTEe2JW763YLbh/
AU+8X8evFu40qLgvOgKoyy5DLy6i8zetX+3t9K0Fxt9+Vzzq6lm5V/RS8iIPPn+M
q1/3Z5kD0KQBG9h/Gl8BH+lB71ZxPAOZ3SMu8DJZcxBLVmDWqQPCr5CKnoz0swID
AQABo2IwYDAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG
AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHgYDVR0OBBcEFWFkbWluQHN0b3JteWNs
b3VkLm9yZzANBgkqhkiG9w0BAQsFAAOCAgEARWOJ69vTHMneSXYscha+4Ytjg0RM
faewJNEGj8qy/Qvh9si2bWYNPRK6BlbHFS7pRYBLAnhaeLBGVv1CCR6GUMMe74zQ
UuMeAoWU6qMDmB3GfYoZJh8sIxpwHqyJeTdeccRbZ4sX4F6u3IHPXYiU/AgbYqH7
pYXQg2lCjXZYaDFAlEf5SlYUDOhhXe5kR8Edhlrsu32/JzA1DQK0JjxKCBp+DQmA
ltdOpQtAg03fHP4ssdj7VvjIDl28iIlATwBvHrdNm7T0tYWn6TWhvxbRqvfTxfaH
MvxnPdIJwNP4/9TyQkwjwHb1h+ucho3CnxI/AxspdOvT1ElMhP6Ce6rcS9pk11Rl
x0ChsqpWwDg7KYpg0qZFSKCTBp4zBq9xoMJ6BQcgMfyl736WbsCzFTEyfifp8beg
NxUa/Qk7w7cuSPGyMIKNOmOR7FLlFbtocy8sXVsUQdqnp/edelufdNe39U9uNtY6
yoXI9//Tc6NgOwy2Oyia0slZ5qHRkB7e4USXMRzJ3p4q9eCVKjAJs81Utp7O2U+9
vhbhwWP8CAnNTT1E5WS6EKtfrdqF7wjkV+noPGLDGmrXi01J1fSMAjMfVO+7/LOL
UN+G4ybKWnEhhOO27yidN8Xx6UrCS23DBlPPQAeA74dTsTExiOxf1o1EXzcQiMyO
LAj3/Ojbi1xkWhI=
-----END CERTIFICATE-----

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF2TCCA8GgAwIBAgIQIHQPtSoFU+cUpYD8PZaWZjANBgkqhkiG9w0BAQsFADB2
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEfMB0GA1UEAwwW
YXJuYXZiaGF0dDI4OEBtYWlsLmkycDAeFw0yMzAxMjUxODUzNDFaFw0zMzAxMjUx
ODUzNDFaMHYxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgx
HjAcBgNVBAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMR8w
HQYDVQQDDBZhcm5hdmJoYXR0Mjg4QG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtwG73sC0jYd3fgEzZh0SveAdUd5yD35nINJRrdPSrSwY
n3i1qGe3fNLj877PvUDU+qiHH0fFZfyFkXTaq3TUp1u4YkmvaoPHy6FZlojB08lK
FBm+iJ1hifQ7MFmvIKUGv+cjlN6xSoQ0U6B2QOy6iZnBgFZ/7jbRY4iZOIj7VJtY
aodeHfy0bWe447VJovbkUi7NJPFZQS65LMcAIWcWTxrC0Gj8SmdxL3a5+hxpmmg0
+KCQvWQDdxAQjsc16sgUCdUc6cWYO4yw9H6fgdq9GJX+LnXR9OB58GsAjjlLlFoI
CZxdARDpoqcIj6AoKIanALf8yfbIyrqqJE47cuaqV9bht5MWKnXbwHplEkT4ZNkh
PnRDia7B5HY3uwbt39CBm264PEWXvWG2sozTWKQqBjmMN2cj/NFDUEqKv6BggMY1
HcqxWFKRcgKCtRvrmTmfp5l0/ou+OtUaFUg0a6Qhtb93Hj10vK6wZzidBqj0ggzB
eJDI95b89u8JgzRoOBriuMKTc91WTkOvBLkB3dgUbUpx2p8KHjvf/pppBH9u0oxp
qJFFK840DbnJydEvjKezeVe5Ax6YRSRxyEdKzRoWdvKVxb3qBBKMdCKTYEPxHPBu
JMEQVUCXJMti++1KEiQGhcfWvLyT7OewbcIZNk9XWNrxlKcGrTp9AOwaaNC5m1kC
AwEAAaNjMGEwDgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr
BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MB8GA1UdDgQYBBZhcm5hdmJoYXR0Mjg4
QG1haWwuaTJwMA0GCSqGSIb3DQEBCwUAA4ICAQAHiK0ld/1PF9DIhutD660/bzBg
mF2Z76hcBqDZ8tnQai/u/RXYrH9wso9BYyrVsvk3fr6tpGT49Ian0MVpPOxMoTU2
oBEmQlYrfclQLFsOLmA0y2r1ggXzIrt69jB710Vhwdnz09oOE8rS4E2T5oDD8Wvy
Kony+AarRceqtkOlzyquc42KjzdrbHsosF7G2iGhNI6t+T3BfWJ+Q+d5sj3OIh6e
gSfvHL44E4vZt6dtofRN3MAZ60kNLF5YWyaUo3Snv9Lso1IwIz3AVr5ehv+8sFL/
KxaXdkZ5Yn2YUX7p1t4VQd+eXVPYjf1befg4PvrwSkylu3Jpee3fllZSKXeSVx9x
jpJiq5vIakqk22pnWb1Vn7xzSW1vtEG7QLjobOr1WrcGiwdv+HKiWcXJXDzKoWXs
h3VEfr51Kap8cIJv+D6lJIG9IcIhiQ6CXWBmtjWJvbdVwFBy1/3Fhaou9liHi+gK
4Yh5a5OGCzc7xjtpGaTmoLEz7NzDNOdd/r840qRDOh70izzmFZd5Gwq4hoVcPJcS
EAySwtgqK0/4d0zDd2Wg9ASJV9DnDf8QuSmHZgZ9Efs47XcWz9TvkWUS1E66AJsN
mmI1NDQ3mv3dv5+WPq+dqqYFsnx3xWL1g5Z3buk0opeuXMzoHwM7UfN8h7Q1M5+t
+XBgkaYA4iEwYKqlCQ==
-----END CERTIFICATE-----

@ -1,34 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIF5TCCA82gAwIBAgIRANFIiHpTaRY2Z30TQOiuqFcwDQYJKoZIhvcNAQELBQAw
cDELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGTAXBgNVBAMM
EGF0b21pa2VAbWFpbC5pMnAwHhcNMTYwODAyMTQyNDEyWhcNMjYwODAyMTQyNDEy
WjBwMQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYD
VQQKExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UE
AwwQYXRvbWlrZUBtYWlsLmkycDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
ggIBAMLRmxclaAvm405JLHNNiniUi0aZaBoLJ+afwn2LGfTDUhTD5Y8lW6V9o90n
eTNOCaiid7bWpVBkA1M4gZ9TdUnP0POa99jXZbj4PHFRl1l8k4Ap12PUO3hgwtH7
7j7j+UPaIuE2y+U7hJbmyQ0v7r8yjGWSTtSqs+exNhyr4Mh7DvacZySZ+oqQdXYA
vnfDpBX1dKlN1Nb4XloG0uE1OK1YfJoC+p+v8qXjKagIdZgThdmsWcQ82EGI+Q9u
VfrE4m3CNwJy0X86wMNYqHej88wBHnJMmTm+cZtFLVmZsRqnuLAQL1wrfCbGSltR
zhVQHTysLwMz9+llTXtzMf+R2kcEAYWiPc5IRVU+LvkN/610r5fuHW+OcQ9ZgRVn
PMqlv5PDG2ZxdIOAQQsOd7fH0r5q3MhqlVstVE45Rl33uA+M7wjJK2cvnOoSioxp
szn2GIZliXQXo4dJczgfN2U4PLBGRBGmrB1R2S1YsG6CrSJuMCX14VKJP69Nfm8a
EDA5GKNke+ZpXCszPLaNMB70LVFQc9FmMhsOgLIIoJBgd61uMgokMJJMLaWN0RaK
w1ZduxYGUmg2T2pi/clIkVzZmlcHKViUn0sMcKD+ibEPOvQIB/3HPEEt6iIkanc/
da5IFzikkaykt/Tu6o8rreeEu65HkIxFaCHegSXLHSyxj00BAgMBAAGjejB4MA4G
A1UdDwEB/wQEAwIChDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYD
VR0TAQH/BAUwAwEB/zAZBgNVHQ4EEgQQYXRvbWlrZUBtYWlsLmkycDAbBgNVHSME
FDASgBBhdG9taWtlQG1haWwuaTJwMA0GCSqGSIb3DQEBCwUAA4ICAQAA0MdWfN/N
1q5CdJqDyw4JQwzdYkA27Wr02qIcmwnqjcCEDPl4uDTyqN9gbEpJ48AcsdXRa6GE
lLh/qJ67I6YDe63LuhndzRULNgxGHVMGS8kBJIssQehb2rOFnbUTp0gMR+0QpXXe
omase4kL90c9uuYX1vXaO/ADssY2/QX49prwJO+UY/jGhcX4YheFI/teA85u6Qko
ero437Shqhl0kbdK+eBkOFf9a7mGxpMT73KE1jFS6433W4fFOkybQ1dcS0qStaUM
3qKC0EQCbAl1seAp3AGuG46swHZB0rZ1WCKVAr5yqCWSWMYO+fL6FosNg9z/VDVh
g6FFfoGrv19yaVFa9AvQsk1ATZ+bwtHProNx2Xet9pnAI30dT16+C5wCctoR6RVf
iOHl6CGqadjOycbMDVvOfJhypNDgWW3gBaCfXiAocJTLpR7hKNZ2bnvcP2xyXH1j
Qz/kiMJoZ3+TV1yC/x/maAHsUIQHqqd6ZRj7x5MgJq0UBdITo2ZQVfXYI0ZGIeNm
fMu+P5448+NdpASa9QoqS8kPFeUaHJMzMFHBKhrr8lTJeZ82hKBXt5jD3Tbef5Ck
n5auKu2D0IjvrzsdIpNMQAhuBPT06TW/LzN/MvardZcaLcBmcutefw6Z7RsedHvj
cGpnw4a2u9sHZIUNHzoGq32+7UWXsBI5Ow==
-----END CERTIFICATE-----

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfTCCA2WgAwIBAgIEOprmhjANBgkqhkiG9w0BAQ0FADBvMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEYMBYGA1UEAwwPYmFja3VwQG1haWwu
aTJwMB4XDTEzMTAxMzEzNDQ1NVoXDTIzMTAxMzEzNDQ1NVowbzELMAkGA1UEBhMC
WFgxCzAJBgNVBAgTAlhYMQswCQYDVQQHEwJYWDEeMBwGA1UEChMVSTJQIEFub255
bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGDAWBgNVBAMMD2JhY2t1cEBtYWls
LmkycDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIoAkobXwk/Enf1d
roHyqCyvcJfZJVTwb/LgYWAvCBMCr+RGqlSgtk3g69Y3I0xU08fD2kGt3r5Pwsbr
omXIbJAcccyLqmQ5QX6QgL+X9VpMDp9C4h2RogCrqLBAWw4cuZ4RS9VCpP1Yis7H
uejYqENP86p7BsRnuW/4cYnfunAdMpss4LpRGQXt1nTX+kfgCYgnKFbFqwAHt7yV
Ds+Pe6FuBHPlp+sc1amKRcUnSvhXLsv43VicnT7xYL/kUsN83wrtHA3B4aGDx3aA
3/EzuRmIXQB0BlTZILMEyYwG/nc4OsW82QYrvEZ9BIg9A4lF/wS/KZCICPxLF2zo
dGjnmlgkiA4s8eO+va/ElHyELjckVXqmG1eXHhSkEsDvOQJy01IUuwLinvq7cUbJ
HfJBZJllEg+sLDCv3FkEqN+XjBNFfQN4oNew4w6IPY6YH1INVB9LL0Cmdu4DudLv
TY8OcI8eSfez3hmm+pYQ23PJRYYnvRDnRECyIWBegkckWRh8U/WvZUYUvETK6EDl
/0KpTtfzX6MqHA5D6bTAB8Y3ijGMLrZ/B5vj5yCoZbLiGme9X2moR2k1LEhdhtzV
exsqezCpg6dn48FTX7mHjvR5/r4kz2jqBGmdPUWIIxnjFUzDUK3llVQiHihleHpe
jL4LqnhBGKWFRTaVwaIkBG4zAfIzAgMBAAGjITAfMB0GA1UdDgQWBBQNkfW7bSMl
1/4KDbgwrkf9x1Zu/TANBgkqhkiG9w0BAQ0FAAOCAgEAGg3a3rTf0EznQocmio0T
5gCoL0n8h6yKW/PyPAIELrd9wiYjhJFcWvMTcJJJnVqmAL5vpvhaAFVtAfx70MGa
0DZ7FvytK5hEfF4IqOFDyEEVGJR5rIpVK4MeI1nmwEsxdbW+FhODjtRzgYO8XBME
Xj4aY1FWg9vxc3reUj6PSFsZtsB0aLiRgL9JDovJIiRw0Uqr1v2wXBte5yVCxDge
vTREZtpK4cKetoOa68pwSXI32JwKE18j6bfdKVBCcYQKlKP/3gHGduaDrQv3w32S
DRym5s6MREeTUOtAw4wq46KpdOX8yyAqJPrCfMwS6ORd3t+egqOw0PUnsqb97w4O
lUtrRYvb2cOj60SmRx4vJvItyuHbKqIK7o2e1RcUZPXYoAVx2ww4XB2Wk4D7LSAs
cS7nLj8yAqzJ2qqtBzxu+zILJtkVa12dKF0xmS0BxBp4sCYiBtmAVE8AWQqEuSHA
FrMWqoXcjcfdvvyX487FFWWUE7ZBIn0hee2sK9J9+SPtqczJaN7TF3K3nzo65WJG
1epltmq2Ugjb67Gz7v4y7H23DJ/qhm8yLtCHTj69HTta5I08j6Kut924WLZaiMO/
4YoEL5AE63X0sxYibKFQiq7FW5nUJA280GRlY3xSMFzlB2ggazrUV3YAWVDhfdnI
flpzWXkFM2D36OUaubfe9YY=
-----END CERTIFICATE-----

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFezCCA2OgAwIBAgIEUQYyQjANBgkqhkiG9w0BAQ0FADBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
MnAwHhcNMTQxMTA2MDkxMTE0WhcNMjQxMTA1MDkxMTE0WjBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
MnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCrThOH0eSDT0VnCSBC
sqYmAydWH+O8eNttDXr2mSvZLhvAW+6/xHTkKhaWvkIvvS0Vh8hujMnD90Cgp4Fk
TKCxMj9K527o5xIZwWW05OevbjlBwIpVLO1PjmsfsoD1nIX14eEzJSEoAulKsv7V
jGUC/6hC11mmVvH9buQLSRv6sCjuAcMszmw3TAD+XYBIs+z57KuwYXtX3+OA543c
l1/ZKLYkkwY8cwzZqWDVWqTKP5TfVae58t40HhJk3bOsr21FZsaOjlmao3GO+d/3
exKuUGJRcolSqskL3sZ1ovFqko81obvvx0upI0YA0iMr/NRGl3VPuf/LJvRppYGc
LsJHgy9TIgtHvaXRi5Nt4CbKl9sZh/7WkkTTI5YGvevu00btlabAN+DSAZZqdsB3
wY8HhM1MHiA9SWsqwU65TwErcRrjNna2FiDHEu0xk5+/iAGl6CSKHZBmNcYKXSv8
cwShB0jjmciK0a05nC638RPgj0fng7KRrSglyzfjXRrljmZ40LSBL/GGMZMWpOM7
mEsBH5UZJ/2BEmjc9X9257zBdx8BK8y1TXpAligpNBsERcTw1WP1PJ35einZvlXW
qI3GwMf0sl26sn+evcK0gDl27jVDZ45MtNQEq64M4NV3Tn9zq0eg/39YvjVeqrI5
l7sxmYqYGR6BuSncwdc4x+t6swIDAQABoyEwHzAdBgNVHQ4EFgQU/REZ7NMbVZHr
Xkao6Q8Ccqv2kAMwDQYJKoZIhvcNAQENBQADggIBACc2YjLVNbl1kJUdg2klCLJt
5LjNTiIZa2Cha5GStlC/lyoRRge6+q/y9TN3tTptlzLPS9pI9EE1GfIQaE+HAk+e
/bC3KUOAHgVuETvsNAbfpaVsPCdWpFuXmp/4b9iDN7qZy4afTKUPA/Ir/cLfNp14
JULfP4z2yFOsCQZ5viNFAs1u99FrwobV2LBzUSIJQewsksuOwj96zIyau0Y629oJ
k+og88Tifd9EH3MVZNGhdpojQDDdwHQSITnCDgfRP5yER1WIA4jg6l+mM90QkvLY
5NjWTna5kJ3X6UizvgCk365yzT2sbN3R9UGXfCJa9GBcnnviJtJF3+/gC0abwY2f
NtVYp32Xky45NY/NdRhDg0bjHP3psxmX+Sc0M9NuQcDQ+fUR+CzM0IGeiszkzXOs
RG+bOou2cZ81G4oxWdAALHIRrn7VvLGlkFMxiIZyhYcTGQZzsTPT6n18dY99+DAV
yQWZfIRdm8DOnt0G+cwfeohc/9ZwDmj4jJAAi0aeTXdY6NEGIVydk6MAycEhg2Hx
9EV96kRwZNIW0AGY8CozECFL3Eyo2ClQVV4Q35SsBibsitDjM03usc2DJ/qjynXA
C8HoOSWgbddiBvqZueqK8GdhykOy3J3ysr+MNN/lbG48LqkQr1OWxev9rGGQ6RJT
wpBgPyAFAwouPy1whmnx
-----END CERTIFICATE-----

@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFyzCCA7OgAwIBAgIRALWNWsnQ0Vmn/99iCNT7cdQwDQYJKoZIhvcNAQELBQAw
cTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNVBAMM
EWVjaGVsb24zQG1haWwuaTJwMB4XDTIxMTEyOTE5MzU1OVoXDTMxMTEyOTE5MzU1
OVowcTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNV
BAMMEWVjaGVsb24zQG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA3pccNiQWJUS1t3QHK7rBCNKAsM2dz4szN3+3SrDy1w+rOrK8Vt5aypPU
QYUQwG+odjEPacuoRtO/W14KJl5yAI3eQS+X/cYDXmxvfm4zx5JRumYptXwJD57G
rlPHnFvk8R+Hvh+/UyqgSAZ9ZaKjEzYK4AtbYEXtopaM4U2VYN8xKjvKyWlhPdxo
kI3//qcTlSqGHHeHrkItLG1LubM1EnPu+9zI2WN2zBBRcm8ZtWqHoqFJ1zgJr/49
nMK8Lnb3I54ctva8x5+gsSk4dbG/mMsOIZekFqYJJs3+u9w5fmOYI7v9GlQr7UhE
G3MwjJ5Cj1LmLVlz/4LApZrDSd2JvwIUdGL3UW8+blaTeCPKIRvmsTeRxo1gORMF
ZH0dg39722lK7ScwOlOUX9ggzRUlYCmvnjQJZGJEUoP68QxjlQfkXZyffmMfvm6K
V6mcZ5aHMGO1lYAl40kWNJ0jGpmxJqTDhNFDEKr0TlRGVxXGWzObEOrcJ8ysRMc1
x6oXQhh79HXZcKwhZaXLx23ZvVoTfhRm4JH0SSP6XqQm35j4NI1SllEsDns29wU3
Re4wOWJCCYlPG3CtY32CinwQRoVgtiJk18W8+Pxw7sBFq8sL5L0Z+5bB6nTkBfV6
7OrZGWL0i344zQE0e3yIsLih+5Wyqw6RSSMysenl3alnUB9EvE0CAwEAAaNeMFww
DgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAP
BgNVHRMBAf8EBTADAQH/MBoGA1UdDgQTBBFlY2hlbG9uM0BtYWlsLmkycDANBgkq
hkiG9w0BAQsFAAOCAgEAaUMnMYtNFBl9dFON6e4EjYo53Wknj61uIVO11dvLqjnh
7X6guPML+GgNZsPQGLu7Bqw4hVgy/cV5AlFc7SXOhzpaYo1ycpjg3Ws1VK2wrk7+
4bvUThNcS1KZVFDdRE62549rYNfYNfPxXvccOTW9meTCC1kLHerh65ySDr9J02O6
o5Mf685PgBasBH6dlosOLTtee2gRLNFcAluQYKerawS1gDys5239UNHPCqTgO+Od
FiKfl48OIOzPGLKEf4lXC+lkwZElewShrHhzd8aGueedTi0UHOtQuY7ocsofqXc8
OnyT/y2X6wn/YkzviKgfxYDSI7FJiUgXCPcT0jUNmuwR168yL5BfzoQmrCvlOOQg
P7ibdBJ6UkL8pRpv/SYpvaX/kf4agYtwh5IL9FzNCwNu54ZC6JilLUhYAU38Eolq
OZ/cGiMoSFQIeBPvB3cdsqEud9W4P+MqN5A76fMzdVV77lGsIS1eCGMceR3CjOiF
6SdAskcBZWhFiRNQweC0iv57/nPCeTCuNAqbZSHd7zC1AKhNmmsKSJUJQCGijcce
P8Gl0AFfZneN2bVEFvJ/zd71pD8ll1Gkju16bfdWn0V4NRaxFiXNr2bL+ah9blud
EXOomE3R6ow1QZk+Gnpy3wh9jfwlrJuFoANvHnv4WREbdjwr//71XjBri5p1wPE=
-----END CERTIFICATE-----

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIESg3kkzANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UEAwwQZWNoZWxvbkBtYWls
LmkycDAeFw0xNDA3MzExNjQ3MDJaFw0yNDA3MzAxNjQ3MDJaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRkwFwYDVQQDDBBlY2hlbG9uQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmcEgLwwhzLNe
XLOMSrhwB8hWpOhfjo4s6S/wjBtjjUc8nI3D0hSn3HY26p0rvcvNEWexPUpPULmC
exGkU463nu7PiFONiORI1eJAiUFHibRiaA7Wboyo38pO73KirwjG07Y+Ua0jp+HS
+4FQ/I/9H/bPplReTOU/6hmRbgQ69U8nE68HzZHQxP68yVJ2rPHSXMPhF4R1h0G1
1mCAT+TgTsnwHNGF77XHJnY4/M4e2cgycEZjZow36C3t2mNDVkMgF19QQeb9WmLR
zREn3nq9BJqHpUkn9yWw0kKXTZSds+7UxESfzf3BzK0+hky2fh5H+qbYAo2lz4yj
81MXTAu+4RRkg4DBLlF+2dkclhwQLxxzvkRC6tPkn5i33Yltg7EfzA9IoQ05potJ
I+iOcF+aStfFgFj9u3B5UkcF4P0cH1QD3c6BK4hIezQYqRoPly1gHqg+XdwjG/dr
4as7HA9FTz3p2E8nClpIC1x3hfgwAdfd29aeBxO1WW/z99iMF7TBAF+u5T86XEW1
WpknqCbTli36yJ8a5fPWxZHrryBRJT5yLxejjFeadtutBSwljiVFq+Y38VqwFivq
VLiBt7IxAsZ8iilgfnnnAvBH6chWfSKb4H7kB4TJvDiV96QmmvoEaWYNHZozMhyK
tO3b5w+xqbJXyCLA3Q75jD0km76hjcECAwEAAaMhMB8wHQYDVR0OBBYEFAHQcAam
QRS/EUhuCSr9pB4Ux0rYMA0GCSqGSIb3DQEBDQUAA4ICAQBq1+1QLmgLAjrTg3tb
4XKgAVICQRoBDNUEobQg3pYeUX9eFNya2RxNljuvYpwT80ilGMPOXcjddmr5ngiK
dbGRcuuJk9MPEHtPaPT3+JJlvKQ3B3g2wva2Wz2OAyLZUGQs389K4nTbwh4QF0n2
aHFL8BHiD62hiKnCoNaW4ZovUNNvOxo9lMyAiaFU2gqQNcdad8hP9EAllbvbxDx9
Tjww2UbwQUIHS9rna4Tlu+f0hDXTWIutc2A51W2fJCb7L3+lYO7Wv55ND/WtryLZ
XpMp27+MpuEnN3kQmz/l9R0hIJsWc/x9GQkjm5wEaIZEyTtenqwRKGmVCtAj0Pgv
jn1L3/lWmrNq+OZHb/QeyfKtA3nXfQKVmT98ewQiK/S5i1xIAXCJPytOD887b/o1
cdurTmCiZMwgiQ+HLJqCg3MDa5mvKqRkRdZXfE6aQWEcSbpAhpV15R17q7L+Fg0W
shLSNucxyGNU8PjiC/nOmqfqUiPiMltJjPmscxBLim8foyxjakC4+6N6m+Jzgznj
PocBehFAfKYj66XEwzIBN7Z2uuXoYH9YptkocFjTzvchcryVulDWZ4FWxreUMhpM
4oyjjhSB4tB9clXlwMqg577q3D6Ms0zLTqsztyPN3zr6jGev3jpVq7Q1GOlciHPv
JNJOWTH/Vas1W6XlwGcOOAARTQ==
-----END CERTIFICATE-----

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF3TCCA8WgAwIBAgIRAKye34BRrKyQN6kMVPHddykwDQYJKoZIhvcNAQELBQAw
dzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxIDAeBgNVBAMM
F2hhbmtoaWxsMTk1ODBAZ21haWwuY29tMB4XDTIwMDUwNzA1MDkxMFoXDTMwMDUw
NzA1MDkxMFowdzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJY
WDEeMBwGA1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAx
IDAeBgNVBAMMF2hhbmtoaWxsMTk1ODBAZ21haWwuY29tMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEA5Vt7c0SeUdVkcXXEYe3M9LmCTUyiCv/PHF2Puys6
8luLH8lO0U/pQ4j703kFKK7s4rV65jVpGNncjHWbfSCNevvs6VcbAFoo7oJX7Yjt
5+Z4oU1g7JG86feTwU6pzfFjAs0RO2lNq2L8AyLYKWOnPsVrmuGYl2c6N5WDzTxA
Et66IudfGsppTv7oZkgX6VNUMioV8tCjBTLaPCkSfyYKBX7r6ByHY86PflhFgYES
zIB92Ma75YFtCB0ktCM+o6d7wmnt10Iy4I6craZ+z7szCDRF73jhf3Vk7vGzb2cN
aCfr2riwlRJBaKrLJP5m0dGf5RdhviMgxc6JAgkN7Ius5lkxO/p3OSy5co0DrMJ7
lvwdZ2hu0dnO75unTt6ImR4RQ90Sqj7MUdorKR/8FcYEo+twBV8cV3s9kjuO5jxV
g976Q+GD3zDoixiege3W5UT4ff/Anm4mJpE5PKbNuO+KUjk6WA4B1PeudkEcxkO4
tQYy0aBzfjeyENee9otd4TgN1epY4wlHIORCa3HUFmFZd9VZMQcxwv7c47wl2kc9
Cv1L6Nae78wRzRu2CHD8zWhq+tv5q7Md2eRd3mFPI09ljsOgG2TQv6300WvHvI5M
enNdjYjLqOTRCzUJ2Jst4BZsvDxjWYkHsSZc1UORzm2LQmh2bJvbhC3m81qANGw6
ZhcCAwEAAaNkMGIwDgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMC
BggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCAGA1UdDgQZBBdoYW5raGlsbDE5
NTgwQGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAVtMF7lrgkDLTNXlavI7h
HJqFxFHjmxPk3iu2Qrgwk302Gowqg5NjVVamT20cXeuJaUa6maTTHzDyyCai3+3e
roaosGxZQRpRf5/RBz2yhdEPLZBV9IqxGgIxvCWNqNIYB1SNk00rwC4q5heW1me0
EsOK4Mw5IbS2jUjbi9E5th781QDj91elwltghxwtDvpE2vzAJwmxwwBhjySGsKfq
w8SBZOxN+Ih5/IIpDnYGNoN1LSkJnBVGSkjY6OpstuJRIPYWl5zX5tJtYdaxiD+8
qNbFHBIZ5WrktMopJ3QJJxHdERyK6BFYYSzX/a1gO7woOFCkx8qMCsVzfcE/z1pp
JxJvshT32hnrKZ6MbZMd9JpTFclQ62RV5tNs3FPP3sbDsFtKBUtj87SW7XsimHbZ
OrWlPacSnQDbOoV5TfDDCqWi4PW2EqzDsDcg+Lc8EnBRIquWcAox2+4zmcQI29wO
C1TUpMT5o/wGyL/i9pf6GuTbH0D+aYukULropgSrK57EALbuvqnN3vh5l2QlX/rM
+7lCKsGCNLiJFXb0m6l/B9CC1947XVEbpMEAC/80Shwxl/UB+mKFpJxcNLFtPXzv
FYv2ixarBPbJx/FclOO8G91QC4ZhAKbsVZn5HPMSgtZe+xWM1r0/UJVChsMTafpd
CCOJyu3XtyzFf+tAeixOnuQ=
-----END CERTIFICATE-----

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFgTCCA2mgAwIBAgIETWAY1DANBgkqhkiG9w0BAQ0FADBxMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBAbWFp
bC5pMnAwHhcNMjExMjEzMTU0MDI3WhcNMzExMjExMTU0MDI3WjBxMQswCQYDVQQG
EwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5v
bnltb3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBA
bWFpbC5pMnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXnjJ8UQ0f
lHHpfPMiHofBPSuL4sbOJY6fOXwPhSg/h6THh9DS/ZWmJXQ3qRD0glDVtv4/Dr/9
ldGQ5eltF9iCFXCQlMEy2HjQrBKq0nsl7RpYK12cyMaod0kkzCUk9ITLi9CmHM3Z
gQZcmG8TWjFEpDR+idx/QkQt2pcO4vzWlDit3Vh4ivnbX5jGQHbsVjQEMQWxr+pX
dsS+YQpjZ6RBmrooGTPO8QDOOeYLAn0lCjmffc/kzIH9E/p4/O0rOpyhVYbdxUD1
5wkqN9l4yrtxmORG/PudnRQQ0r4TUq8vsxfGY0Euo9IbhgXF2Parel1ZhDxB1WZV
VwWtgLIh9jGA1UMa8SYKnEfp8LWNZ3b3mUUnZb3kMrLk6jGYRWNsHmamhd4mC7AZ
qf/8lOkEIw3bPd3YguCDRVcLui5BwIEZmqXg8uoESxfO/sW3pBrN/8M7MkTex9kN
vjitGDDXvenK27qmNgZxbBlX72yTSfys7XTYTLnxZC8AwdAo2Wz9Z6HhGiPonf2h
vZkc9ZxuE0jFIrsbJra4X7iyjXgi4vV4ARNg/9Ft6F4/OIbECgeDcBQqq4TlT2bZ
EfWVrBbqXoj5vNsLigIkd+AyUNwPYEcB5IFSiiOh98pC7BH3pg0m8U5YBjxe1i+9
EQOOG0Qtx+JigXZHu6bGE0Twy9zy+UzoKQIDAQABoyEwHzAdBgNVHQ4EFgQUGK1b
0DkL6aLalcfBc/Uj/SF08C0wDQYJKoZIhvcNAQENBQADggIBAMpXM82bJDpH1TlH
TvhU3Z7nfZdvEhOQfujaFUYiuNripuEKcFGn948+DvAG0FUN+uNlJoqOVs8D7InD
gWlA9zpqw5Cl5Hij/Wns9QbXuAHJeA23fVUoaM2A6v9ifcIQ1A+rDuRQAo6/64KW
ChTg2e99RBpfGOyqgeh7tLLe0lPPekVpKHFuXabokaKRDuBcVHcUL4tWXe3dcyqa
Ej/PJrrS+nWL0EGZ4q80CEd2LPuDzPxNGCJt/R7ZfadENWajcgcXGceh1QBzozrB
SL/Ya6wF9SrsB7V/r5wX0LM4ZdDaLWbtmUe5Op0h/ZMH25Sa8xAXVz+O9L6sWSoO
FaiYTOvAiyyPz+nsxKa3xYryDHno7eKSt+hGOcaurhxbdZaEFY/CegEc73tCt9xK
e9qF8O/WkDLmixuErw3f5en4IfzGR7p3lJAwW/8WD8C6HS39h/eE7dVZNaWgtQnZ
SgGjgZMTJqTcQ3aZmfuCZefxGFok8w6AIkdbnd1pdMBRjYu8aXgl2hQSB9ZADDE9
R5d3rXi0PkSFLIvsNjVa5KXrZk/tB0Hpfmepq7CufBqjP/LG9TieRoXzLYUKFF74
QRwjP+y7AJ+VDUTpY1NV1P+k+2raubU2bOnLF3zL5DtyoyieGPhyeMMvp0fRIxdg
bSl5VHgPXHNM8mcnndMAuzvl7jEK
-----END CERTIFICATE-----

@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIFzTCCA7WgAwIBAgIQeUqFi0fHNQopg6BZlBLhVzANBgkqhkiG9w0BAQsFADBy
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEbMBkGA1UEAwwS
aTJwLXJlc2VlZEBtazE2LmRlMB4XDTIyMDIwNTE3MzkzM1oXDTMyMDIwNTE3Mzkz
M1owcjELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGzAZBgNV
BAMMEmkycC1yZXNlZWRAbWsxNi5kZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAMYxs2D2xpN/8blGawvAlU9DemHIxApOEwaLNfh8aAvqEdB41NTqcx4U
H8VchSormCfkCvezuMHO+K2HX7ihEZ1v6tbr6aX6hY9UZUyDDYsKmJoB1oKEhddv
5UYfcWPE2eSykdFsWgTQD6Z+cRQWHEoCzb7qc+Jrw6KcnHMD0VrmBrEQPzTBxMHW
4HC97PVkSLJTDArnS6ZiX4IbWRPw/mbpJT6EoVZo8J/it0pdn/X4KodEXDcnEMSe
VRulfZH/nSmOOvKhoHPckmgz/u66BlnuSYXEIB0KfDIcAlSYiPDxGnAemTozJYXA
UVMeFMs+YE5wiPgzzu+vpC31xtZLq0gyaCfgEi1P9j2ES/8pH3Gw6W2OH4kBx+jO
TBsfI+ph6qFZ3WWT23MRVyl3ATuI/GHdczTxD9JaOn74lLI+Hnu8wXnyztVWkTMB
4sAnzjdeHkvNDyQ10vSaN0HnGfg6zuAuUSqFQujFF8Vg8ZCcsh8GouWfzYDvi9mj
9pfxx8v6UCC719I4J9CgFjWnn2Hqez3fO8fFulY61VPyCCZp4gKWbI2SIQP/n5gz
ecYJRrJoem+rYfEQ/fwxROsvm3fCO4D6dt7ILRuX286GDIw2qSvP1zZVAioMwSj3
9CAjKLwD/BhTRiMOlpaVv6IWqjtevbiaIKvbHTnoxvkGsDqe3gJhAgMBAAGjXzBd
MA4GA1UdDwEB/wQEAwIChDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
DwYDVR0TAQH/BAUwAwEB/zAbBgNVHQ4EFAQSaTJwLXJlc2VlZEBtazE2LmRlMA0G
CSqGSIb3DQEBCwUAA4ICAQAb+x6XpJdjpVYw2bvWIUbatQJwq0YaEW5W61xGLgIG
a37oll3YZbSY9Vk+N1cE0f61L3ya4Ioz6zlH/MO2zUG/dEk8vqdgIPUYJvyF7wwF
w3/G4VMaDKOJx4bAZNmaiRFGYNhCOhCnZx6uZGrLNIJ2Dc+mflrGmGwYphtXVV3e
Iv+ki3gSRgfXuMfKi4B5bLPnz7XDe4TSmwZZSRac4ly4KqmZUyntqbilRxaGTej3
VYJ1tac8yppyk5N3VopMQNmBarNZG16wSOTD7CtKgn382jgRW8cR7BMeqhORivp0
ZnPJFhzh4uthdlPdXXo6lxfvZjfiwlDPytvEu2QBz3urTgopGqRLcTBnLucWg9li
OSy9z7hNEnIN3iIJJAwI1wBdDa7K0h3PFBbIUa7X2ybn81VeNSfO25Lo8YTZEKsc
wcThJrNV6qOQv8rM/7aXugi6+VzPlCR+18iKRbebCnlqGR2dT1zFtj3negtOkrjo
LH4H6VUr3q2Ie56IubS2hUKiUkDm0ckP3Vum35GGntyEAzl6uyog0hJFOJb3aq30
YQLzyVEOz8NnA+32oMRzJJdDxQ7pqG5fgq7EF4d++YSgEfdVXxvfgXQ6m3jAyC7Z
p/gX4rlxNsjeGU3Ds51wkmhH4IB1aSQr52PE6RaBhhh3SmADEv6S/3eGvE4F4MN5
2Q==
-----END CERTIFICATE-----

@ -1,33 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFvjCCA6agAwIBAgIQIDtv8tGMh0FyB2w5XjfZxTANBgkqhkiG9w0BAQsFADBt
MIIFvjCCA6agAwIBAgIQBnsUOmOu2oZZIwHBmQc1BDANBgkqhkiG9w0BAQsFADBt
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwN
aWdvckBub3ZnLm5ldDAeFw0xNzA3MjQxODI4NThaFw0yNzA3MjQxODI4NThaMG0x
aWdvckBub3ZnLm5ldDAeFw0yMzAxMjgxNDM4MzFaFw0zMzAxMjgxNDM4MzFaMG0x
CzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNVBAoT
FUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1p
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxst4
cam3YibBtQHGPCPX13uRQti56U3XZytSZntaKrUFmJxjt41Q/mOy3KYo+lBvhfDF
x3tWKjgP9LJOJ28zvddFhZVNxqZRjcnAoPuSOVCw88g01D9OAasKF11hCfdxZP6h
vGm8WCnjD8KPcYFxJC4HJUiFeProAwuTzEAESTRk4CAQe3Ie91JspuqoLUc5Qxlm
w5QpjnjfZY4kaVHmZDKGIZDgNIt5v85bu4pWwZ6O+o90xQqjxvjyz/xccIec3sHw
MHJ8h8ZKMokCKEJTaRWBvdeNXki7nf3gUy/3GjYQlzo0Nxk/Hw4svPcA+eL0AYiy
Jn83bIB5VToW2zYUdV4u3qHeAhEg8Y7HI0kKcSUGm9AQXzbzP8YCHxi0sbb0GAJy
f1Xf3XzoPfT64giD8ReUHhwKpyMB6uvG/NfWSZAzeAO/NT7DAwXpKIVQdkVdqy8b
mvHvjf9/kWKOirA2Nygf3r79Vbg2mqbYC/b63XI9hheU689+O7qyhTEhNz+11X0d
Zax7UPrLrwOeB9TNfEnztsmrHNdv2n+KcOO2o11Wvz2nHP9g+dgwoZSD1ZEpFzWP
0sD5knKLwAL/64qLlAQ1feqW7hMr80IADcKjLSODkIDIIGm0ksXqEzTjz1JzbRDq
jUjq7EAlkw3G69rv1gHxIntllJRQidAqecyWHOMCAwEAAaNaMFgwDgYDVR0PAQH/
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLkf
bM3uiYfp9m0vgdoftyXtk2/9bHf3u5iaM0WfoJIsw1iizo/mxJl+Iy7SxLC16nV0
v5FpncVv+Z8x9dgoAYVuLq9zKfsAbpj6kuxAqw6vJMlD1TiIL3nSODV9BJLk47X5
tmvoOSj9BgvemYThTE3nj+DbuJRW5q90KyBV/LdLrQJX3k5R3FFL5tTad2LKFNZ4
vEOcYwwx6mvrkJ2lly6bAQUCtfc648Jyq+NO3Rba1fmn7gcP9zXXc5KYsj/ovyY2
OaocSF5wMhzBuPxO+M2HqbYLMAkc6/GesGds8Rm8wofuhJoI5YtqJuLKZm6nQXSc
fx6PKgbKcTIUWNFMsxyfghz9hpbg0rkvC7PtfAjtV0yaDtUum1eZeNEx1HbRWN2n
TQNCVuv0yaKC41qxqzhEybkdjL9JlgUh7VuskaCelB0lz+kgYjGu8ezOa0ua2iKq
4FC/1MbPulxN8NOt4pmbGqqoxmCdShp38wdnOBM3DsAS9f0JaQZd4CDyY4DCSfVn
xPdWk31+VXVt3Ixh1EUqZWYTRSsZApkCyYzkiZ/qPGG6FR9Hq2SuhC5o4P44k7eo
6wwBWD8a5RjsZhvr05E5yBrKXh/PjLwmtG73QC+ouR54/5xtedvdTwNS94FnNctX
FT6QGZnRwCkhPaRe1oQMzP+88pGoCfO33GBAuwUCAwEAAaNaMFgwDgYDVR0PAQH/
BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E
BTADAQH/MBYGA1UdDgQPBA1pZ29yQG5vdmcubmV0MA0GCSqGSIb3DQEBCwUAA4IC
AQADyPaec28qc1HQtAV5dscJr47k92RTfvan+GEgIwyQDHZQm38eyTb05xipQCdk
5ruUDFXLB5qXXFJKUbQM6IpaktmWDJqk4Zn+1nGbtFEbKgrF55pd63+NQer5QW9o
3+dGj0eZJa3HX5EBkd2r7j2LFuB6uxv3r/xiTeHaaflCnsmyDLfb7axvYhyEzHQS
AUi1bR+ln+dXewdtuojqc1+YmVGDgzWZK2T0oOz2E21CpZUDiP3wv9QfMaotLEal
zECnbhS++q889inN3GB4kIoN6WpPpeYtTV+/r7FLv9+KUOV1s2z6mxIqC5wBFhZs
0Sr1kVo8hB/EW/YYhDp99LoAOjIO6nn1h+qttfzBYr6C16j+8lGK2A12REJ4LiUQ
cQI/0zTjt2C8Ns6ueNzMLQN1Mvmlg1Z8wIB7Az7jsIbY2zFJ0M5qR5VJveTj33K4
4WSbC/zMWOBYHTVBvGmc6JGhu5ZUTZ+mWP7QfimGu+tdhvtrybFjE9ROIE/4yFr6
GkxEyt0UY87TeKXJ/3KygvkMwdvqGWiZhItb807iy99+cySujtbGfF2ZXYGjBXVW
dJOVRbyGQkHh6lrWHQM4ntBv4x+5QA+OAan5PBF3tcDx1vefPx+asYslbOXpzII5
qhvoQxuRs6j5jsVFG6RdsKNeQAt87Mb2u2zK2ZakMdyD1w==
AQCteAb5/bqhHr/i5CJbDzlofprXFC826c19GxQ/9Hw0kA52l0J9Q8Vz8Vy7VQyP
QNa8MCv6FeNy8a/wXp6cafyFsBtvehVQO8lFlpCgMEl2Bma43+GaCwkrM6bFNXeW
iQ9h4e1KjsUZ8cQDNEcamiJ80+xbMhBrj5bAZwKmZs8MoGEMyXKEZmcmwA+/fy1c
cx4izsOsmRXmEHXsvB9ydJHZZeKW8+r0DAtgPslwXuXHG6MuBQo7dKCqn+iMxHXV
Jxriq3yvNffdGx4maSLJrjQ1ealt/UMzql7huVSItnVFWoYf7GAELXNJ/PmqVyaK
q11LQ8W/Aud6s/bblaJrFJnK8PbPpaw4RvHoWVLYaZYmQnV2msWs5EuESBlEADbv
UklQXLMc2f9HKWPA5678nvYPrmu8IL5pMkAxgGRqmd+7vCz4lU9M5z3HObU+WRBt
qEMYyXywV8o3tbmnlDS5S5Xxf+tLZn1cxz3ZrmcHPHDbLBNdvszF3CTJH/R2sQvD
bizvYJM+p5F+GWM5mt6w0HrOut5MRlpOws/NRrkbijuVA/A45nzTtKplIFYE3qe8
q5SAbwYLc8cJcZCN3PxtWwbEv81V33abMt5QcjnWGLH5t2+1Z2KLCgKLSCQTxM8s
zBPHtUe8qtSQaElnNLILYbtJ1w67dPnGYTphHihC+CXjBg==
-----END CERTIFICATE-----

@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFeTCCA2GgAwIBAgIEZZozujANBgkqhkiG9w0BAQ0FADBtMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwNbWVlaEBtYWlsLmky
cDAeFw0xNDA2MjgyMjQ5MDlaFw0yNDA2MjcyMjQ5MDlaMG0xCzAJBgNVBAYTAlhY
MQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9ueW1v
dXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1tZWVoQG1haWwuaTJw
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnVnmPE4uUvCky0yCnnVH
cJEDqzwDPupx0zr0YDlhZk5VOPPecx5haayJ/V6nXPc1aVVWn+CHfedcF2aBgN4K
5aBueS/l6l5WHcv02DofAqlTmyAws3oQeR1qoTuW24cKRtLR7h5bxv63f6bgp6e+
RihFNez6UxErnRPuJOJEO2Im6EgVp6fz7tQ7R35zxAUeES2YILPySvzy2vYm/EEG
jXX7Ap2A5svVo90xCMOeUZ/55vLsjyIshN+tV87U4xwvAkUmwsmWVHm3BQpHkI6z
zMJie6epB8Bqm0GYm0EcElJH4OCxGTvDLoghpswbuUO7iy3JSfoL7ZCnoiQdK9K4
yVVChj8lG+r7KaTowK96iZep+sZefjOt5VFGuW2Fi/WBv3ldiLlJAo/ZfrUM4+vG
fyNBXbl6bX87uTCGOT1p3dazo+zJMsAZ+Y93DlM/mDEWFa1kKNrs74syzaWEqF4L
KQE6VoYn80OOzafSigTVQgSwUtQtB0XGhMzJhyxU2XHWe1LFIy7Pta0B+lDiZj7c
I8nXxYjsDfEu/Elj/Ra9N6bH0awmgB5JDa+Tbir+oEM5SyDfpSaCGuatdGxjweGI
kVmFU0SqCZV/8TXbIu6MUVzTZMZVT94edifFSRad4fqw7eZbSXlPu++3d1/btn6h
ibM04nkv0mm+FxCKB/wdAkECAwEAAaMhMB8wHQYDVR0OBBYEFO7jIkSRkoXyJcho
9/Q0gDOINa5EMA0GCSqGSIb3DQEBDQUAA4ICAQBzfWO7+8HWOKLaYWToJ6XZbpNF
3wXv1yC4W/HRR80m4JSsq9r0d7838Nvd7vLVP6MY6MaVb/JnV76FdQ5WQ6ticD0Y
o3zmpqqbKVSspN0lrkig4surT88AjfVQz/vEIzKNQEbpzc3hC2LCiE2u+cK/ix4j
b9RohnaPvwLnew5RNQRpcmk+XejaNITISr2yQIwXL7TEYy8HdGCfzFSSFhKe9vkb
GsWS5ASrUzRoprswmlgRe8gEHI+d51Z7mWgna0/5mBz9bH/3QXtpxlLWm3bVV+kt
pZjQDTHE0GqG2YsD1Gmp4LU/JFhCojMTtiPCXmr9KFtpiVlx06DuKm5PC8Ak+5w+
m/DQYYfv9z+AA5Y430bjnzwg67bhqVyyek4wcDQinFswv3h4bIB7CJujDcEqXXza
lhG1ufPPCUTMrVjh7AShohZraqlSlyQPY9vEppLwD4W1d+MqDHM7ljOH7gQYaUPi
wE30AdXEOxLZcT3aRKxkKf2esNofSuUC/+NXQvPjpuI4UJKO3eegi+M9dbnKoNWs
MPPLPpycecWPheFYM5K6Ao63cjlUY2wYwCfDTFgjA5q8i/Rp7i6Z6fLE3YWJ4VdR
WOFB7hlluQ//jMW6M1qz6IYXmlUjcXl81VEvlOH/QBNrPvX3I3SYXYgVRnVGUudB
o3eNsanvTU+TIFBh2Q==
-----END CERTIFICATE-----

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEbNbRPjANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQb3JpZ25hbEBtYWls
LmkycDAeFw0yMTA3MDYyMjExMDFaFw0zMTA3MDQyMjExMDFaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBvcmlnbmFsQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvNJz2KGuAkHP
tGFobfLvpybtxB50fkcEsTc9opmiy7wBKK9rSI01VS616IhABkWKZVfK2A9NqpGv
v/CyhTKoaeSNeXY7+zORUWgWK/zA9fA4GRZFqlW8j4tbompDwcLYNqRBCsn1C0OY
YA5JhXPBixMcnXl8N8x4sXhQ4l9R3+QrydhUHRvgDc8dOxRyIX7zuQAyf8tmA2Xo
xZLdvDcCJdLBIbFwxhIceIhgcOwaOx7oRkZDZdYcLJd3zjyPbu8JtOM2ZkwH7r+0
ro5PktuDp2LAS6SII5yYNcwcrvPZGPqhLdifIw1BrdTIb/rIkQZ5iXOOdyPmT7e8
IwAJcPFlfvrS4Vbi9oDqyx3aDUBoubgmFnO1TirL56ck83R/ubcKtdnyzAn5dp+f
ZNYW6/foSBpDDOCViylbFAR5H0HJEbBns7PZx6mGEEI4tUAJdNYl7Ly7Df60a9Rz
cD/gz08U9UwFXYKoT6roEjToADGAzb5MI4cVlAb2AmQaMNXNe04HcDL1bU50mkNU
amqPv8nxf72fBQCEmZz2G57T6QiYTtcCwiWS1QdWsuaOtCo9zO0MKcjzSdUxuxEc
dXhjQdNegsgg/Xk7bJ8lKOsACqMpFftdPmuyeZU2t+3RPuBpV/0j2qUfg/y6kb0z
CxAOYmlcL4kqw4VT+5V/EeZLIG0h9I0CAwEAAaMhMB8wHQYDVR0OBBYEFD/wJObg
CCDuhMJCVWTSTj+B3rsUMA0GCSqGSIb3DQEBDQUAA4ICAQC0PjsTSPWlGbLNeeI8
F0B5xAwXYJzZ7/LRxh8u42HDUqVIDjqkuls1l3v9D7htty2Gr3Ws2dcvcOr2KcOy
mEWg+jdP/N3vt9IkZeVS4YQoPgq6orn7lVkk00bcKb24f7ZnoQnnVV0/m42Y5P4j
LLh+8MBxsez9azXyZbDVEkgsMUAkdVO6KNz6scqz7wb8egV2GAMAp7cwChC6lanK
gv9ZyJhG/HdTv6VyuMZhJy6rX4geM97tm1iHu1VLsQcIzBKAdEvWJv8ofMeiyINe
hqAP9NYaeowKi975NOrmf+XZwxd0niApIohV684RCVUfL8H7HSPbdXhBJ/WslyDP
cTGhA2BLqEXZBn/nLQknlnl0SZTQxG2n4fEgD1E5YS/aoBrig/uXtWm2Zdf8U3mM
+bNXhbi9s7LneN2ye8LlNJBSRklNn/bNo8OmzLII1RQwf1+vaHT96lASbTVepMZ/
Y9VcC8fAmho/zfQEKueLEB03K+gr2dGD+1crmMtUBjWJ9vPjtooZArtkDbh+kVYA
cx4N4NXULRwxVWZe5wTQOqcZ3qSS1ClMwaziwychGaj8xRAirHMZnlPOZO1UK4+5
8F4RMJktyZjNgSLP76XPS4rJK5fobuPqFeA4OpDFn/5+/XeQFF6i6wntx1tzztzH
zc+BrVZOdcYPqu9iLXyRQ9JwwA==
-----END CERTIFICATE-----

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

Loading…
Cancel
Save