mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-08 22:13:48 +01:00
Merge branch 'PurpleI2P:openssl' into fuzzing-1
This commit is contained in:
commit
476ff62015
25 changed files with 226 additions and 127 deletions
27
ChangeLog
27
ChangeLog
|
@ -1,6 +1,33 @@
|
||||||
# for this file format description,
|
# for this file format description,
|
||||||
# see https://github.com/olivierlacan/keep-a-changelog
|
# see https://github.com/olivierlacan/keep-a-changelog
|
||||||
|
|
||||||
|
## [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
|
## [2.48.0] - 2023-06-12
|
||||||
### Added
|
### Added
|
||||||
- Allow user/password authentication method for SOCK5 proxy
|
- Allow user/password authentication method for SOCK5 proxy
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -67,6 +67,9 @@ else ifneq (, $(findstring linux, $(SYS))$(findstring gnu, $(SYS)))
|
||||||
else ifneq (, $(findstring freebsd, $(SYS))$(findstring openbsd, $(SYS)))
|
else ifneq (, $(findstring freebsd, $(SYS))$(findstring openbsd, $(SYS)))
|
||||||
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
|
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
|
||||||
include Makefile.bsd
|
include Makefile.bsd
|
||||||
|
else ifneq (, $(findstring haiku, $(SYS)))
|
||||||
|
DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
|
||||||
|
include Makefile.haiku
|
||||||
else # not supported
|
else # not supported
|
||||||
$(error Not supported platform)
|
$(error Not supported platform)
|
||||||
endif
|
endif
|
||||||
|
|
10
Makefile.haiku
Normal file
10
Makefile.haiku
Normal file
|
@ -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
|
|
@ -99,7 +99,7 @@ Current status: [![Crowdin](https://badges.crowdin.net/i2pd/localized.svg)](http
|
||||||
Donations
|
Donations
|
||||||
---------
|
---------
|
||||||
|
|
||||||
**E-Mail**: ```i2porignal at yandex.ru```
|
**E-Mail**: ```i2porignal at yandex.com```
|
||||||
|
|
||||||
**BTC**: ```3MDoGJW9TLMTCDGrR9bLgWXfm6sjmgy86f```
|
**BTC**: ```3MDoGJW9TLMTCDGrR9bLgWXfm6sjmgy86f```
|
||||||
|
|
||||||
|
|
BIN
Win32/mask.bmp
BIN
Win32/mask.bmp
Binary file not shown.
Before Width: | Height: | Size: 25 KiB |
|
@ -139,6 +139,10 @@ if(APPLE)
|
||||||
add_definitions(-DMAC_OSX)
|
add_definitions(-DMAC_OSX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(HAIKU)
|
||||||
|
add_definitions(-D_DEFAULT_SOURCE -D_GNU_SOURCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions(-DWINVER=0x0600)
|
add_definitions(-DWINVER=0x0600)
|
||||||
add_definitions(-D_WIN32_WINNT=0x0600)
|
add_definitions(-D_WIN32_WINNT=0x0600)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%define git_hash %(git rev-parse HEAD | cut -c -7)
|
%define git_hash %(git rev-parse HEAD | cut -c -7)
|
||||||
|
|
||||||
Name: i2pd-git
|
Name: i2pd-git
|
||||||
Version: 2.48.0
|
Version: 2.49.0
|
||||||
Release: git%{git_hash}%{?dist}
|
Release: git%{git_hash}%{?dist}
|
||||||
Summary: I2P router written in C++
|
Summary: I2P router written in C++
|
||||||
Conflicts: i2pd
|
Conflicts: i2pd
|
||||||
|
@ -28,9 +28,11 @@ Requires: logrotate
|
||||||
Requires: systemd
|
Requires: systemd
|
||||||
Requires(pre): %{_sbindir}/useradd %{_sbindir}/groupadd
|
Requires(pre): %{_sbindir}/useradd %{_sbindir}/groupadd
|
||||||
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
C++ implementation of I2P.
|
C++ implementation of I2P.
|
||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n i2pd-openssl
|
%setup -q -n i2pd-openssl
|
||||||
|
|
||||||
|
@ -38,72 +40,56 @@ C++ implementation of I2P.
|
||||||
%build
|
%build
|
||||||
cd build
|
cd build
|
||||||
%if 0%{?rhel} == 7
|
%if 0%{?rhel} == 7
|
||||||
%cmake3 \
|
%cmake3 \
|
||||||
-DWITH_LIBRARY=OFF \
|
-DWITH_LIBRARY=OFF \
|
||||||
-DWITH_UPNP=ON \
|
-DWITH_UPNP=ON \
|
||||||
-DWITH_HARDENING=ON \
|
-DWITH_HARDENING=ON \
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||||
%else
|
%else
|
||||||
%cmake \
|
%cmake \
|
||||||
-DWITH_LIBRARY=OFF \
|
-DWITH_LIBRARY=OFF \
|
||||||
-DWITH_UPNP=ON \
|
-DWITH_UPNP=ON \
|
||||||
-DWITH_HARDENING=ON \
|
-DWITH_HARDENING=ON \
|
||||||
%if 0%{?fedora} > 29
|
%if 0%{?fedora} > 29
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
||||||
.
|
.
|
||||||
%else
|
%else
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 35 || 0%{?eln}
|
||||||
%if 0%{?rhel} == 9
|
pushd redhat-linux-build
|
||||||
pushd redhat-linux-build
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?fedora} >= 35
|
|
||||||
pushd redhat-linux-build
|
|
||||||
%else
|
%else
|
||||||
%if 0%{?fedora} >= 33
|
%if 0%{?fedora} >= 33
|
||||||
pushd %{_target_platform}
|
pushd %{_target_platform}
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia} > 7
|
%if 0%{?mageia} > 7
|
||||||
pushd build
|
pushd build
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
%if 0%{?rhel} == 9
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 33 || 0%{?mageia} > 7
|
||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?fedora} >= 33
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia} > 7
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
pushd build
|
pushd build
|
||||||
|
|
||||||
%if 0%{?rhel} == 9
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 35 || 0%{?eln}
|
||||||
pushd redhat-linux-build
|
pushd redhat-linux-build
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?fedora} >= 35
|
|
||||||
pushd redhat-linux-build
|
|
||||||
%else
|
%else
|
||||||
%if 0%{?fedora} >= 33
|
%if 0%{?fedora} >= 33
|
||||||
pushd %{_target_platform}
|
pushd %{_target_platform}
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia}
|
%if 0%{?mageia}
|
||||||
pushd build
|
pushd build
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
chrpath -d i2pd
|
chrpath -d i2pd
|
||||||
|
@ -158,6 +144,9 @@ getent passwd i2pd >/dev/null || \
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Sep 18 2023 orignal <orignal@i2pmail.org> - 2.49.0
|
||||||
|
- update to 2.49.0
|
||||||
|
|
||||||
* Mon Jun 12 2023 orignal <orignal@i2pmail.org> - 2.48.0
|
* Mon Jun 12 2023 orignal <orignal@i2pmail.org> - 2.48.0
|
||||||
- update to 2.48.0
|
- update to 2.48.0
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Name: i2pd
|
Name: i2pd
|
||||||
Version: 2.48.0
|
Version: 2.49.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: I2P router written in C++
|
Summary: I2P router written in C++
|
||||||
Conflicts: i2pd-git
|
Conflicts: i2pd-git
|
||||||
|
@ -26,9 +26,11 @@ Requires: logrotate
|
||||||
Requires: systemd
|
Requires: systemd
|
||||||
Requires(pre): %{_sbindir}/useradd %{_sbindir}/groupadd
|
Requires(pre): %{_sbindir}/useradd %{_sbindir}/groupadd
|
||||||
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
C++ implementation of I2P.
|
C++ implementation of I2P.
|
||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
|
@ -36,71 +38,56 @@ C++ implementation of I2P.
|
||||||
%build
|
%build
|
||||||
cd build
|
cd build
|
||||||
%if 0%{?rhel} == 7
|
%if 0%{?rhel} == 7
|
||||||
%cmake3 \
|
%cmake3 \
|
||||||
-DWITH_LIBRARY=OFF \
|
-DWITH_LIBRARY=OFF \
|
||||||
-DWITH_UPNP=ON \
|
-DWITH_UPNP=ON \
|
||||||
-DWITH_HARDENING=ON \
|
-DWITH_HARDENING=ON \
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||||
%else
|
%else
|
||||||
%cmake \
|
%cmake \
|
||||||
-DWITH_LIBRARY=OFF \
|
-DWITH_LIBRARY=OFF \
|
||||||
-DWITH_UPNP=ON \
|
-DWITH_UPNP=ON \
|
||||||
-DWITH_HARDENING=ON \
|
-DWITH_HARDENING=ON \
|
||||||
%if 0%{?fedora} > 29
|
%if 0%{?fedora} > 29
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
-DBUILD_SHARED_LIBS:BOOL=OFF \
|
||||||
.
|
.
|
||||||
%else
|
%else
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?rhel} == 9
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 35 || 0%{?eln}
|
||||||
pushd redhat-linux-build
|
pushd redhat-linux-build
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?fedora} >= 35
|
|
||||||
pushd redhat-linux-build
|
|
||||||
%else
|
%else
|
||||||
%if 0%{?fedora} >= 33
|
%if 0%{?fedora} >= 33
|
||||||
pushd %{_target_platform}
|
pushd %{_target_platform}
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia} > 7
|
%if 0%{?mageia} > 7
|
||||||
pushd build
|
pushd build
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
%if 0%{?rhel} == 9
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 33 || 0%{?mageia} > 7
|
||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?fedora} >= 33
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia} > 7
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
pushd build
|
pushd build
|
||||||
|
|
||||||
%if 0%{?rhel} == 9
|
%if 0%{?rhel} == 9 || 0%{?fedora} >= 35 || 0%{?eln}
|
||||||
pushd redhat-linux-build
|
pushd redhat-linux-build
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?fedora} >= 35
|
|
||||||
pushd redhat-linux-build
|
|
||||||
%else
|
%else
|
||||||
%if 0%{?fedora} >= 33
|
%if 0%{?fedora} >= 33
|
||||||
pushd %{_target_platform}
|
pushd %{_target_platform}
|
||||||
%endif
|
%endif
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?mageia}
|
%if 0%{?mageia}
|
||||||
pushd build
|
pushd build
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
chrpath -d i2pd
|
chrpath -d i2pd
|
||||||
|
@ -155,6 +142,9 @@ getent passwd i2pd >/dev/null || \
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Sep 18 2023 orignal <orignal@i2pmail.org> - 2.49.0
|
||||||
|
- update to 2.49.0
|
||||||
|
|
||||||
* Mon Jun 12 2023 orignal <orignal@i2pmail.org> - 2.48.0
|
* Mon Jun 12 2023 orignal <orignal@i2pmail.org> - 2.48.0
|
||||||
- update to 2.48.0
|
- update to 2.48.0
|
||||||
|
|
||||||
|
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -1,3 +1,9 @@
|
||||||
|
i2pd (2.49.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* updated to version 2.49.0/0.9.60
|
||||||
|
|
||||||
|
-- orignal <orignal@i2pmail.org> Mon, 18 Sep 2023 16:00:00 +0000
|
||||||
|
|
||||||
i2pd (2.48.0-1) unstable; urgency=high
|
i2pd (2.48.0-1) unstable; urgency=high
|
||||||
|
|
||||||
* updated to version 2.48.0/0.9.59
|
* updated to version 2.48.0/0.9.59
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace french // language namespace
|
||||||
{"Address", "Adresse"},
|
{"Address", "Adresse"},
|
||||||
{"Type", "Type"},
|
{"Type", "Type"},
|
||||||
{"EncType", "EncType"},
|
{"EncType", "EncType"},
|
||||||
{"Expire LeaseSet", "Expiration du LeaseSet"},
|
{"Expire LeaseSet", "Expirer le jeu de baux"},
|
||||||
{"Inbound tunnels", "Tunnels entrants"},
|
{"Inbound tunnels", "Tunnels entrants"},
|
||||||
{"%dms", "%dms"},
|
{"%dms", "%dms"},
|
||||||
{"Outbound tunnels", "Tunnels sortants"},
|
{"Outbound tunnels", "Tunnels sortants"},
|
||||||
|
@ -153,8 +153,8 @@ namespace french // language namespace
|
||||||
{"StreamID can't be null", "StreamID ne peut pas être vide"},
|
{"StreamID can't be null", "StreamID ne peut pas être vide"},
|
||||||
{"Return to destination page", "Retourner à la page de destination"},
|
{"Return to destination page", "Retourner à la page de destination"},
|
||||||
{"You will be redirected in %d seconds", "Vous serez redirigé dans %d secondes"},
|
{"You will be redirected in %d seconds", "Vous serez redirigé dans %d secondes"},
|
||||||
{"LeaseSet expiration time updated", "Temps d'expiration du LeaseSet mis à jour"},
|
{"LeaseSet expiration time updated", "Temps d'expiration du jeu de baux mis à jour"},
|
||||||
{"LeaseSet is not found or already expired", "Le LeaseSet est introuvable ou a déjà expirée"},
|
{"LeaseSet is not found or already expired", "Le jeu de baux est introuvable ou a déjà expiré"},
|
||||||
{"Transit tunnels count must not exceed %d", "Le nombre de tunnels de transit ne doit pas excéder %d"},
|
{"Transit tunnels count must not exceed %d", "Le nombre de tunnels de transit ne doit pas excéder %d"},
|
||||||
{"Back to commands list", "Retour à la liste des commandes"},
|
{"Back to commands list", "Retour à la liste des commandes"},
|
||||||
{"Register at reg.i2p", "Inscription à reg.i2p"},
|
{"Register at reg.i2p", "Inscription à reg.i2p"},
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace italian // language namespace
|
||||||
{"Stopping in", "Arresto in"},
|
{"Stopping in", "Arresto in"},
|
||||||
{"Family", "Famiglia"},
|
{"Family", "Famiglia"},
|
||||||
{"Tunnel creation success rate", "Percentuale di tunnel creati con successo"},
|
{"Tunnel creation success rate", "Percentuale di tunnel creati con successo"},
|
||||||
|
{"Total tunnel creation success rate", "Percentuale di successo totale nella creazione del tunnel"},
|
||||||
{"Received", "Ricevuti"},
|
{"Received", "Ricevuti"},
|
||||||
{"%.2f KiB/s", "%.2f KiB/s"},
|
{"%.2f KiB/s", "%.2f KiB/s"},
|
||||||
{"Sent", "Inviati"},
|
{"Sent", "Inviati"},
|
||||||
|
@ -95,6 +96,7 @@ namespace italian // language namespace
|
||||||
{"Address", "Indirizzo"},
|
{"Address", "Indirizzo"},
|
||||||
{"Type", "Tipologia"},
|
{"Type", "Tipologia"},
|
||||||
{"EncType", "Tipo di crittografia"},
|
{"EncType", "Tipo di crittografia"},
|
||||||
|
{"Expire LeaseSet", "Scadenza LeaseSet"},
|
||||||
{"Inbound tunnels", "Tunnel in entrata"},
|
{"Inbound tunnels", "Tunnel in entrata"},
|
||||||
{"%dms", "%dms"},
|
{"%dms", "%dms"},
|
||||||
{"Outbound tunnels", "Tunnel in uscita"},
|
{"Outbound tunnels", "Tunnel in uscita"},
|
||||||
|
@ -109,6 +111,7 @@ namespace italian // language namespace
|
||||||
{"Local Destination", "Destinazione locale"},
|
{"Local Destination", "Destinazione locale"},
|
||||||
{"Streams", "Flussi"},
|
{"Streams", "Flussi"},
|
||||||
{"Close stream", "Interrompi il flusso"},
|
{"Close stream", "Interrompi il flusso"},
|
||||||
|
{"Such destination is not found", "Questa destinazione non è stata trovata"},
|
||||||
{"I2CP session not found", "Sessione I2CP non trovata"},
|
{"I2CP session not found", "Sessione I2CP non trovata"},
|
||||||
{"I2CP is not enabled", "I2CP non è abilitato"},
|
{"I2CP is not enabled", "I2CP non è abilitato"},
|
||||||
{"Invalid", "Invalido"},
|
{"Invalid", "Invalido"},
|
||||||
|
@ -150,6 +153,8 @@ namespace italian // language namespace
|
||||||
{"StreamID can't be null", "Lo StreamID non può essere null"},
|
{"StreamID can't be null", "Lo StreamID non può essere null"},
|
||||||
{"Return to destination page", "Ritorna alla pagina di destinazione"},
|
{"Return to destination page", "Ritorna alla pagina di destinazione"},
|
||||||
{"You will be redirected in %d seconds", "Sarai reindirizzato tra %d secondi"},
|
{"You will be redirected in %d seconds", "Sarai reindirizzato tra %d secondi"},
|
||||||
|
{"LeaseSet expiration time updated", "Tempo di scadenza LeaseSet aggiornato"},
|
||||||
|
{"LeaseSet is not found or already expired", "LeaseSet non trovato o già scaduto"},
|
||||||
{"Transit tunnels count must not exceed %d", "Il conteggio dei tunnel di transito non deve superare %d"},
|
{"Transit tunnels count must not exceed %d", "Il conteggio dei tunnel di transito non deve superare %d"},
|
||||||
{"Back to commands list", "Ritorna alla lista dei comandi"},
|
{"Back to commands list", "Ritorna alla lista dei comandi"},
|
||||||
{"Register at reg.i2p", "Registra a reg.i2p"},
|
{"Register at reg.i2p", "Registra a reg.i2p"},
|
||||||
|
@ -158,7 +163,6 @@ namespace italian // language namespace
|
||||||
{"Submit", "Invia"},
|
{"Submit", "Invia"},
|
||||||
{"Domain can't end with .b32.i2p", "I domini non possono terminare con .b32.i2p"},
|
{"Domain can't end with .b32.i2p", "I domini non possono terminare con .b32.i2p"},
|
||||||
{"Domain must end with .i2p", "I domini devono terminare con .i2p"},
|
{"Domain must end with .i2p", "I domini devono terminare con .i2p"},
|
||||||
{"Such destination is not found", "Questa destinazione non è stata trovata"},
|
|
||||||
{"Unknown command", "Comando sconosciuto"},
|
{"Unknown command", "Comando sconosciuto"},
|
||||||
{"Command accepted", "Comando accettato"},
|
{"Command accepted", "Comando accettato"},
|
||||||
{"Proxy error", "Errore del proxy"},
|
{"Proxy error", "Errore del proxy"},
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace portuguese // language namespace
|
||||||
{"Stopping in", "Parando em"},
|
{"Stopping in", "Parando em"},
|
||||||
{"Family", "Família"},
|
{"Family", "Família"},
|
||||||
{"Tunnel creation success rate", "Taxa de sucesso na criação de túneis"},
|
{"Tunnel creation success rate", "Taxa de sucesso na criação de túneis"},
|
||||||
|
{"Total tunnel creation success rate", "Taxa total de sucesso na criação de túneis"},
|
||||||
{"Received", "Recebido"},
|
{"Received", "Recebido"},
|
||||||
{"%.2f KiB/s", "%.2f KiB/s"},
|
{"%.2f KiB/s", "%.2f KiB/s"},
|
||||||
{"Sent", "Enviado"},
|
{"Sent", "Enviado"},
|
||||||
|
@ -95,6 +96,7 @@ namespace portuguese // language namespace
|
||||||
{"Address", "Endereço"},
|
{"Address", "Endereço"},
|
||||||
{"Type", "Tipo"},
|
{"Type", "Tipo"},
|
||||||
{"EncType", "Tipo de Criptografia"},
|
{"EncType", "Tipo de Criptografia"},
|
||||||
|
{"Expire LeaseSet", "Expirar LeaseSet"},
|
||||||
{"Inbound tunnels", "Túneis de Entrada"},
|
{"Inbound tunnels", "Túneis de Entrada"},
|
||||||
{"%dms", "%dms"},
|
{"%dms", "%dms"},
|
||||||
{"Outbound tunnels", "Túneis de Saída"},
|
{"Outbound tunnels", "Túneis de Saída"},
|
||||||
|
@ -109,6 +111,7 @@ namespace portuguese // language namespace
|
||||||
{"Local Destination", "Destinos Locais"},
|
{"Local Destination", "Destinos Locais"},
|
||||||
{"Streams", "Fluxos"},
|
{"Streams", "Fluxos"},
|
||||||
{"Close stream", "Fechar fluxo"},
|
{"Close stream", "Fechar fluxo"},
|
||||||
|
{"Such destination is not found", "Tal destino não foi encontrado"},
|
||||||
{"I2CP session not found", "Sessão do I2CP não encontrada"},
|
{"I2CP session not found", "Sessão do I2CP não encontrada"},
|
||||||
{"I2CP is not enabled", "I2CP não está ativado"},
|
{"I2CP is not enabled", "I2CP não está ativado"},
|
||||||
{"Invalid", "Inválido"},
|
{"Invalid", "Inválido"},
|
||||||
|
@ -150,6 +153,8 @@ namespace portuguese // language namespace
|
||||||
{"StreamID can't be null", "StreamID não pode ser nulo"},
|
{"StreamID can't be null", "StreamID não pode ser nulo"},
|
||||||
{"Return to destination page", "Retornar para à página de destino"},
|
{"Return to destination page", "Retornar para à página de destino"},
|
||||||
{"You will be redirected in %d seconds", "Você será redirecionado em %d segundos"},
|
{"You will be redirected in %d seconds", "Você será redirecionado em %d segundos"},
|
||||||
|
{"LeaseSet expiration time updated", "Tempo de validade do LeaseSet atualizado"},
|
||||||
|
{"LeaseSet is not found or already expired", "LeaseSet não foi encontrado ou já expirou"},
|
||||||
{"Transit tunnels count must not exceed %d", "A contagem de túneis de trânsito não deve exceder %d"},
|
{"Transit tunnels count must not exceed %d", "A contagem de túneis de trânsito não deve exceder %d"},
|
||||||
{"Back to commands list", "Voltar para a lista de comandos"},
|
{"Back to commands list", "Voltar para a lista de comandos"},
|
||||||
{"Register at reg.i2p", "Registrar na reg.i2p"},
|
{"Register at reg.i2p", "Registrar na reg.i2p"},
|
||||||
|
@ -158,7 +163,6 @@ namespace portuguese // language namespace
|
||||||
{"Submit", "Enviar"},
|
{"Submit", "Enviar"},
|
||||||
{"Domain can't end with .b32.i2p", "O domínio não pode terminar com .b32.i2p"},
|
{"Domain can't end with .b32.i2p", "O domínio não pode terminar com .b32.i2p"},
|
||||||
{"Domain must end with .i2p", "O domínio não pode terminar com .i2p"},
|
{"Domain must end with .i2p", "O domínio não pode terminar com .i2p"},
|
||||||
{"Such destination is not found", "Tal destino não foi encontrado"},
|
|
||||||
{"Unknown command", "Comando desconhecido"},
|
{"Unknown command", "Comando desconhecido"},
|
||||||
{"Command accepted", "Comando aceito"},
|
{"Command accepted", "Comando aceito"},
|
||||||
{"Proxy error", "Erro no proxy"},
|
{"Proxy error", "Erro no proxy"},
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace ukrainian // language namespace
|
||||||
{"Stopping in", "Зупинка через"},
|
{"Stopping in", "Зупинка через"},
|
||||||
{"Family", "Сімейство"},
|
{"Family", "Сімейство"},
|
||||||
{"Tunnel creation success rate", "Успішно побудованих тунелів"},
|
{"Tunnel creation success rate", "Успішно побудованих тунелів"},
|
||||||
|
{"Total tunnel creation success rate", "Загальна кількість створених тунелів"},
|
||||||
{"Received", "Отримано"},
|
{"Received", "Отримано"},
|
||||||
{"%.2f KiB/s", "%.2f КіБ/с"},
|
{"%.2f KiB/s", "%.2f КіБ/с"},
|
||||||
{"Sent", "Відправлено"},
|
{"Sent", "Відправлено"},
|
||||||
|
@ -95,6 +96,7 @@ namespace ukrainian // language namespace
|
||||||
{"Address", "Адреса"},
|
{"Address", "Адреса"},
|
||||||
{"Type", "Тип"},
|
{"Type", "Тип"},
|
||||||
{"EncType", "ТипШифр"},
|
{"EncType", "ТипШифр"},
|
||||||
|
{"Expire LeaseSet", "Завершити LeaseSet"},
|
||||||
{"Inbound tunnels", "Вхідні тунелі"},
|
{"Inbound tunnels", "Вхідні тунелі"},
|
||||||
{"%dms", "%dмс"},
|
{"%dms", "%dмс"},
|
||||||
{"Outbound tunnels", "Вихідні тунелі"},
|
{"Outbound tunnels", "Вихідні тунелі"},
|
||||||
|
@ -109,6 +111,7 @@ namespace ukrainian // language namespace
|
||||||
{"Local Destination", "Локальні Призначення"},
|
{"Local Destination", "Локальні Призначення"},
|
||||||
{"Streams", "Потоки"},
|
{"Streams", "Потоки"},
|
||||||
{"Close stream", "Закрити потік"},
|
{"Close stream", "Закрити потік"},
|
||||||
|
{"Such destination is not found", "Така точка призначення не знайдена"},
|
||||||
{"I2CP session not found", "I2CP сесія не знайдена"},
|
{"I2CP session not found", "I2CP сесія не знайдена"},
|
||||||
{"I2CP is not enabled", "I2CP не увікнуто"},
|
{"I2CP is not enabled", "I2CP не увікнуто"},
|
||||||
{"Invalid", "Некоректний"},
|
{"Invalid", "Некоректний"},
|
||||||
|
@ -150,6 +153,8 @@ namespace ukrainian // language namespace
|
||||||
{"StreamID can't be null", "Ідентифікатор потоку не може бути порожнім"},
|
{"StreamID can't be null", "Ідентифікатор потоку не може бути порожнім"},
|
||||||
{"Return to destination page", "Повернутися на сторінку точки призначення"},
|
{"Return to destination page", "Повернутися на сторінку точки призначення"},
|
||||||
{"You will be redirected in %d seconds", "Ви будете переадресовані через %d секунд"},
|
{"You will be redirected in %d seconds", "Ви будете переадресовані через %d секунд"},
|
||||||
|
{"LeaseSet expiration time updated", "Час закінчення LeaseSet оновлено"},
|
||||||
|
{"LeaseSet is not found or already expired", "LeaseSet не знайдено або вже закінчився"},
|
||||||
{"Transit tunnels count must not exceed %d", "Кількість транзитних тунелів не повинна перевищувати %d"},
|
{"Transit tunnels count must not exceed %d", "Кількість транзитних тунелів не повинна перевищувати %d"},
|
||||||
{"Back to commands list", "Повернутися до списку команд"},
|
{"Back to commands list", "Повернутися до списку команд"},
|
||||||
{"Register at reg.i2p", "Зареєструвати на reg.i2p"},
|
{"Register at reg.i2p", "Зареєструвати на reg.i2p"},
|
||||||
|
@ -158,7 +163,6 @@ namespace ukrainian // language namespace
|
||||||
{"Submit", "Надіслати"},
|
{"Submit", "Надіслати"},
|
||||||
{"Domain can't end with .b32.i2p", "Домен не може закінчуватися на .b32.i2p"},
|
{"Domain can't end with .b32.i2p", "Домен не може закінчуватися на .b32.i2p"},
|
||||||
{"Domain must end with .i2p", "Домен повинен закінчуватися на .i2p"},
|
{"Domain must end with .i2p", "Домен повинен закінчуватися на .i2p"},
|
||||||
{"Such destination is not found", "Така точка призначення не знайдена"},
|
|
||||||
{"Unknown command", "Невідома команда"},
|
{"Unknown command", "Невідома команда"},
|
||||||
{"Command accepted", "Команда прийнята"},
|
{"Command accepted", "Команда прийнята"},
|
||||||
{"Proxy error", "Помилка проксі"},
|
{"Proxy error", "Помилка проксі"},
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace uzbek // language namespace
|
||||||
{"Stopping in", "Ichida to'xtatish"},
|
{"Stopping in", "Ichida to'xtatish"},
|
||||||
{"Family", "Oila"},
|
{"Family", "Oila"},
|
||||||
{"Tunnel creation success rate", "Tunnel yaratish muvaffaqiyat darajasi"},
|
{"Tunnel creation success rate", "Tunnel yaratish muvaffaqiyat darajasi"},
|
||||||
|
{"Total tunnel creation success rate", "Tunnel yaratishning umumiy muvaffaqiyat darajasi"},
|
||||||
{"Received", "Qabul qilindi"},
|
{"Received", "Qabul qilindi"},
|
||||||
{"%.2f KiB/s", "%.2f KiB/s"},
|
{"%.2f KiB/s", "%.2f KiB/s"},
|
||||||
{"Sent", "Yuborilgan"},
|
{"Sent", "Yuborilgan"},
|
||||||
|
@ -95,6 +96,7 @@ namespace uzbek // language namespace
|
||||||
{"Address", "Manzil"},
|
{"Address", "Manzil"},
|
||||||
{"Type", "Turi"},
|
{"Type", "Turi"},
|
||||||
{"EncType", "ShifrlashTuri"},
|
{"EncType", "ShifrlashTuri"},
|
||||||
|
{"Expire LeaseSet", "LeaseSet muddati tugaydi"},
|
||||||
{"Inbound tunnels", "Kirish tunnellari"},
|
{"Inbound tunnels", "Kirish tunnellari"},
|
||||||
{"%dms", "%dms"},
|
{"%dms", "%dms"},
|
||||||
{"Outbound tunnels", "Chiquvchi tunnellar"},
|
{"Outbound tunnels", "Chiquvchi tunnellar"},
|
||||||
|
@ -109,6 +111,7 @@ namespace uzbek // language namespace
|
||||||
{"Local Destination", "Mahalliy joylanish"},
|
{"Local Destination", "Mahalliy joylanish"},
|
||||||
{"Streams", "Strim"},
|
{"Streams", "Strim"},
|
||||||
{"Close stream", "Strimni o'chirish"},
|
{"Close stream", "Strimni o'chirish"},
|
||||||
|
{"Such destination is not found", "Bunday yo'nalish topilmadi"},
|
||||||
{"I2CP session not found", "I2CP sessiyasi topilmadi"},
|
{"I2CP session not found", "I2CP sessiyasi topilmadi"},
|
||||||
{"I2CP is not enabled", "I2CP yoqilmagan"},
|
{"I2CP is not enabled", "I2CP yoqilmagan"},
|
||||||
{"Invalid", "Noto'g'ri"},
|
{"Invalid", "Noto'g'ri"},
|
||||||
|
@ -150,6 +153,8 @@ namespace uzbek // language namespace
|
||||||
{"StreamID can't be null", "StreamID bo'sh bo'lishi mumkin emas"},
|
{"StreamID can't be null", "StreamID bo'sh bo'lishi mumkin emas"},
|
||||||
{"Return to destination page", "Manzilgoh sahifasiga qaytish"},
|
{"Return to destination page", "Manzilgoh sahifasiga qaytish"},
|
||||||
{"You will be redirected in %d seconds", "Siz %d soniyadan so‘ng boshqa yo‘nalishga yo‘naltirilasiz"},
|
{"You will be redirected in %d seconds", "Siz %d soniyadan so‘ng boshqa yo‘nalishga yo‘naltirilasiz"},
|
||||||
|
{"LeaseSet expiration time updated", "LeaseSet amal qilish muddati yangilandi"},
|
||||||
|
{"LeaseSet is not found or already expired", "LeaseSet topilmadi yoki muddati tugagan"},
|
||||||
{"Transit tunnels count must not exceed %d", "Tranzit tunnellar soni %d dan oshmasligi kerak"},
|
{"Transit tunnels count must not exceed %d", "Tranzit tunnellar soni %d dan oshmasligi kerak"},
|
||||||
{"Back to commands list", "Buyruqlar ro'yxatiga qaytish"},
|
{"Back to commands list", "Buyruqlar ro'yxatiga qaytish"},
|
||||||
{"Register at reg.i2p", "Reg.i2p-da ro'yxatdan o'ting"},
|
{"Register at reg.i2p", "Reg.i2p-da ro'yxatdan o'ting"},
|
||||||
|
@ -158,7 +163,6 @@ namespace uzbek // language namespace
|
||||||
{"Submit", "Yuborish"},
|
{"Submit", "Yuborish"},
|
||||||
{"Domain can't end with .b32.i2p", "Domen .b32.i2p bilan tugashi mumkin emas"},
|
{"Domain can't end with .b32.i2p", "Domen .b32.i2p bilan tugashi mumkin emas"},
|
||||||
{"Domain must end with .i2p", "Domen .i2p bilan tugashi kerak"},
|
{"Domain must end with .i2p", "Domen .i2p bilan tugashi kerak"},
|
||||||
{"Such destination is not found", "Bunday yo'nalish topilmadi"},
|
|
||||||
{"Unknown command", "Noma'lum buyruq"},
|
{"Unknown command", "Noma'lum buyruq"},
|
||||||
{"Command accepted", "Buyruq qabul qilindi"},
|
{"Command accepted", "Buyruq qabul qilindi"},
|
||||||
{"Proxy error", "Proksi xatosi"},
|
{"Proxy error", "Proksi xatosi"},
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#define bit_AES (1 << 25)
|
#define bit_AES (1 << 25)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(__GNUC__) && __GNUC__ < 5)
|
#if defined(__GNUC__) && __GNUC__ < 6 && IS_X86
|
||||||
#include <cpuid.h>
|
#include <cpuid.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -29,16 +29,16 @@ namespace cpu
|
||||||
|
|
||||||
inline bool cpu_support_aes()
|
inline bool cpu_support_aes()
|
||||||
{
|
{
|
||||||
#if (defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_IX86) || defined(__i386__))
|
#if IS_X86
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
# if (__clang_major__ >= 6)
|
# if (__clang_major__ >= 6)
|
||||||
__builtin_cpu_init();
|
__builtin_cpu_init();
|
||||||
# endif
|
# endif
|
||||||
return __builtin_cpu_supports("aes");
|
return __builtin_cpu_supports("aes");
|
||||||
#elif (defined(__GNUC__) && __GNUC__ >= 5)
|
#elif (defined(__GNUC__) && __GNUC__ >= 6)
|
||||||
__builtin_cpu_init();
|
__builtin_cpu_init();
|
||||||
return __builtin_cpu_supports("aes");
|
return __builtin_cpu_supports("aes");
|
||||||
#elif (defined(__GNUC__) && __GNUC__ < 5)
|
#elif (defined(__GNUC__) && __GNUC__ < 6)
|
||||||
int cpu_info[4];
|
int cpu_info[4];
|
||||||
bool flag = false;
|
bool flag = false;
|
||||||
__cpuid(0, cpu_info[0], cpu_info[1], cpu_info[2], cpu_info[3]);
|
__cpuid(0, cpu_info[0], cpu_info[1], cpu_info[2], cpu_info[3]);
|
||||||
|
|
|
@ -9,6 +9,24 @@
|
||||||
#ifndef LIBI2PD_CPU_H
|
#ifndef LIBI2PD_CPU_H
|
||||||
#define LIBI2PD_CPU_H
|
#define LIBI2PD_CPU_H
|
||||||
|
|
||||||
|
#if defined(_M_AMD64) || defined(__x86_64__) || defined(_M_IX86) || defined(__i386__)
|
||||||
|
# define IS_X86 1
|
||||||
|
# if defined(_M_AMD64) || defined(__x86_64__)
|
||||||
|
# define IS_X86_64 1
|
||||||
|
# else
|
||||||
|
# define IS_X86_64 0
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define IS_X86 0
|
||||||
|
# define IS_X86_64 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__AES__) && !defined(_MSC_VER) && IS_X86
|
||||||
|
# define SUPPORTS_AES 1
|
||||||
|
#else
|
||||||
|
# define SUPPORTS_AES 0
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
namespace cpu
|
namespace cpu
|
||||||
|
|
|
@ -28,11 +28,6 @@
|
||||||
#include "I2PEndian.h"
|
#include "I2PEndian.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
|
||||||
#if defined(__AES__) && !defined(_MSC_VER) && ((defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_IX86) || defined(__i386__)))
|
|
||||||
#define SUPPORTS_AES 1
|
|
||||||
#else
|
|
||||||
#define SUPPORTS_AES 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
|
@ -165,7 +160,7 @@ namespace crypto
|
||||||
|
|
||||||
// DH/ElGamal
|
// DH/ElGamal
|
||||||
|
|
||||||
#if !defined(__x86_64__)
|
#if !IS_X86_64
|
||||||
const int ELGAMAL_SHORT_EXPONENT_NUM_BITS = 226;
|
const int ELGAMAL_SHORT_EXPONENT_NUM_BITS = 226;
|
||||||
const int ELGAMAL_SHORT_EXPONENT_NUM_BYTES = ELGAMAL_SHORT_EXPONENT_NUM_BITS/8+1;
|
const int ELGAMAL_SHORT_EXPONENT_NUM_BYTES = ELGAMAL_SHORT_EXPONENT_NUM_BITS/8+1;
|
||||||
#endif
|
#endif
|
||||||
|
@ -367,7 +362,7 @@ namespace crypto
|
||||||
BIGNUM * b1 = BN_CTX_get (ctx);
|
BIGNUM * b1 = BN_CTX_get (ctx);
|
||||||
BIGNUM * b = BN_CTX_get (ctx);
|
BIGNUM * b = BN_CTX_get (ctx);
|
||||||
// select random k
|
// select random k
|
||||||
#if (defined(_M_AMD64) || defined(__x86_64__))
|
#if IS_X86_64
|
||||||
BN_rand (k, ELGAMAL_FULL_EXPONENT_NUM_BITS, -1, 1); // full exponent for x64
|
BN_rand (k, ELGAMAL_FULL_EXPONENT_NUM_BITS, -1, 1); // full exponent for x64
|
||||||
#else
|
#else
|
||||||
BN_rand (k, ELGAMAL_SHORT_EXPONENT_NUM_BITS, -1, 1); // short exponent of 226 bits
|
BN_rand (k, ELGAMAL_SHORT_EXPONENT_NUM_BITS, -1, 1); // short exponent of 226 bits
|
||||||
|
@ -434,7 +429,7 @@ namespace crypto
|
||||||
|
|
||||||
void GenerateElGamalKeyPair (uint8_t * priv, uint8_t * pub)
|
void GenerateElGamalKeyPair (uint8_t * priv, uint8_t * pub)
|
||||||
{
|
{
|
||||||
#if (defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_IX86) || defined(__i386__)) || defined(_MSC_VER)
|
#if IS_X86 || defined(_MSC_VER)
|
||||||
RAND_bytes (priv, 256);
|
RAND_bytes (priv, 256);
|
||||||
#else
|
#else
|
||||||
// lower 226 bits (28 bytes and 2 bits) only. short exponent
|
// lower 226 bits (28 bytes and 2 bits) only. short exponent
|
||||||
|
@ -1309,7 +1304,7 @@ namespace crypto
|
||||||
CRYPTO_set_locking_callback (OpensslLockingCallback);*/
|
CRYPTO_set_locking_callback (OpensslLockingCallback);*/
|
||||||
if (precomputation)
|
if (precomputation)
|
||||||
{
|
{
|
||||||
#if (defined(_M_AMD64) || defined(__x86_64__))
|
#if IS_X86_64
|
||||||
g_ElggTable = new BIGNUM * [ELGAMAL_FULL_EXPONENT_NUM_BYTES][255];
|
g_ElggTable = new BIGNUM * [ELGAMAL_FULL_EXPONENT_NUM_BYTES][255];
|
||||||
PrecalculateElggTable (g_ElggTable, ELGAMAL_FULL_EXPONENT_NUM_BYTES);
|
PrecalculateElggTable (g_ElggTable, ELGAMAL_FULL_EXPONENT_NUM_BYTES);
|
||||||
#else
|
#else
|
||||||
|
@ -1324,7 +1319,7 @@ namespace crypto
|
||||||
if (g_ElggTable)
|
if (g_ElggTable)
|
||||||
{
|
{
|
||||||
DestroyElggTable (g_ElggTable,
|
DestroyElggTable (g_ElggTable,
|
||||||
#if (defined(_M_AMD64) || defined(__x86_64__))
|
#if IS_X86_64
|
||||||
ELGAMAL_FULL_EXPONENT_NUM_BYTES
|
ELGAMAL_FULL_EXPONENT_NUM_BYTES
|
||||||
#else
|
#else
|
||||||
ELGAMAL_SHORT_EXPONENT_NUM_BYTES
|
ELGAMAL_SHORT_EXPONENT_NUM_BYTES
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2022, The PurpleI2P Project
|
* Copyright (c) 2013-2023, The PurpleI2P Project
|
||||||
*
|
*
|
||||||
* This file is part of Purple i2pd project and licensed under BSD3
|
* This file is part of Purple i2pd project and licensed under BSD3
|
||||||
*
|
*
|
||||||
|
@ -150,7 +150,7 @@ namespace crypto
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef __AES__
|
#if SUPPORTS_AES
|
||||||
class ECBCryptoAESNI
|
class ECBCryptoAESNI
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -167,7 +167,7 @@ namespace crypto
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __AES__
|
#if SUPPORTS_AES
|
||||||
class ECBEncryption: public ECBCryptoAESNI
|
class ECBEncryption: public ECBCryptoAESNI
|
||||||
#else
|
#else
|
||||||
class ECBEncryption
|
class ECBEncryption
|
||||||
|
@ -183,7 +183,7 @@ namespace crypto
|
||||||
AES_KEY m_Key;
|
AES_KEY m_Key;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __AES__
|
#if SUPPORTS_AES
|
||||||
class ECBDecryption: public ECBCryptoAESNI
|
class ECBDecryption: public ECBCryptoAESNI
|
||||||
#else
|
#else
|
||||||
class ECBDecryption
|
class ECBDecryption
|
||||||
|
|
|
@ -136,6 +136,14 @@ namespace fs {
|
||||||
dataDir = (home != NULL && strlen(home) > 0) ? home : "";
|
dataDir = (home != NULL && strlen(home) > 0) ? home : "";
|
||||||
dataDir += "/Library/Application Support/" + appName;
|
dataDir += "/Library/Application Support/" + appName;
|
||||||
return;
|
return;
|
||||||
|
#elif defined(__HAIKU__)
|
||||||
|
char *home = getenv("HOME");
|
||||||
|
if (home != NULL && strlen(home) > 0) {
|
||||||
|
dataDir = std::string(home) + "/config/settings/" + appName;
|
||||||
|
} else {
|
||||||
|
dataDir = "/tmp/" + appName;
|
||||||
|
}
|
||||||
|
return;
|
||||||
#else /* other unix */
|
#else /* other unix */
|
||||||
#if defined(ANDROID)
|
#if defined(ANDROID)
|
||||||
const char * ext = getenv("EXTERNAL_STORAGE");
|
const char * ext = getenv("EXTERNAL_STORAGE");
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
||||||
#elif defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__GLIBC__)
|
#elif defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__HAIKU__)
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
|
|
||||||
#elif defined(__APPLE__) && defined(__MACH__)
|
#elif defined(__APPLE__) && defined(__MACH__)
|
||||||
|
|
|
@ -833,8 +833,12 @@ namespace transport
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool ipv4Testing = i2p::context.GetTesting ();
|
bool ipv4Testing = i2p::context.GetTesting ();
|
||||||
|
if (!ipv4Testing)
|
||||||
|
ipv4Testing = i2p::context.GetRouterInfo ().IsSSU2V4 () && (i2p::context.GetStatus() == eRouterStatusUnknown);
|
||||||
bool ipv6Testing = i2p::context.GetTestingV6 ();
|
bool ipv6Testing = i2p::context.GetTestingV6 ();
|
||||||
// if still testing, repeat peer test
|
if (!ipv6Testing)
|
||||||
|
ipv6Testing = i2p::context.GetRouterInfo ().IsSSU2V6 () && (i2p::context.GetStatusV6() == eRouterStatusUnknown);
|
||||||
|
// if still testing or unknown, repeat peer test
|
||||||
if (ipv4Testing || ipv6Testing)
|
if (ipv4Testing || ipv6Testing)
|
||||||
PeerTest (ipv4Testing, ipv6Testing);
|
PeerTest (ipv4Testing, ipv6Testing);
|
||||||
m_PeerCleanupTimer->expires_from_now (boost::posix_time::seconds(3 * SESSION_CREATION_TIMEOUT));
|
m_PeerCleanupTimer->expires_from_now (boost::posix_time::seconds(3 * SESSION_CREATION_TIMEOUT));
|
||||||
|
|
|
@ -27,6 +27,17 @@
|
||||||
# include <AvailabilityMacros.h>
|
# include <AvailabilityMacros.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__HAIKU__)
|
||||||
|
#include <gnu/pthread.h>
|
||||||
|
#include <posix/pthread.h>
|
||||||
|
#include <posix/sys/sockio.h>
|
||||||
|
#include <posix/sys/ioctl.h>
|
||||||
|
#ifndef _DEFAULT_SOURCE
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
|
#include <bsd/ifaddrs.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#define MAKE_VERSION_NUMBER(a,b,c) ((a*100+b)*100+c)
|
#define MAKE_VERSION_NUMBER(a,b,c) ((a*100+b)*100+c)
|
||||||
|
|
||||||
#define I2PD_VERSION_MAJOR 2
|
#define I2PD_VERSION_MAJOR 2
|
||||||
#define I2PD_VERSION_MINOR 48
|
#define I2PD_VERSION_MINOR 49
|
||||||
#define I2PD_VERSION_MICRO 0
|
#define I2PD_VERSION_MICRO 0
|
||||||
#define I2PD_VERSION_PATCH 0
|
#define I2PD_VERSION_PATCH 0
|
||||||
#ifdef GITVER
|
#ifdef GITVER
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
#define I2P_VERSION_MAJOR 0
|
#define I2P_VERSION_MAJOR 0
|
||||||
#define I2P_VERSION_MINOR 9
|
#define I2P_VERSION_MINOR 9
|
||||||
#define I2P_VERSION_MICRO 59
|
#define I2P_VERSION_MICRO 60
|
||||||
#define I2P_VERSION_PATCH 0
|
#define I2P_VERSION_PATCH 0
|
||||||
#define I2P_VERSION MAKE_VERSION(I2P_VERSION_MAJOR, I2P_VERSION_MINOR, I2P_VERSION_MICRO)
|
#define I2P_VERSION MAKE_VERSION(I2P_VERSION_MAJOR, I2P_VERSION_MINOR, I2P_VERSION_MICRO)
|
||||||
#define I2P_VERSION_NUMBER MAKE_VERSION_NUMBER(I2P_VERSION_MAJOR, I2P_VERSION_MINOR, I2P_VERSION_MICRO)
|
#define I2P_VERSION_NUMBER MAKE_VERSION_NUMBER(I2P_VERSION_MAJOR, I2P_VERSION_MINOR, I2P_VERSION_MICRO)
|
||||||
|
|
|
@ -360,7 +360,7 @@ namespace client
|
||||||
if (type == eSAMSessionTypeUnknown)
|
if (type == eSAMSessionTypeUnknown)
|
||||||
{
|
{
|
||||||
// unknown style
|
// unknown style
|
||||||
SendI2PError("Unknown STYLE");
|
SendSessionI2PError("Unknown STYLE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,14 +375,14 @@ namespace client
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
// not an ip address
|
// not an ip address
|
||||||
SendI2PError("Invalid IP Address in HOST");
|
SendSessionI2PError("Invalid IP Address in HOST");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto port = std::stoi(params[SAM_PARAM_PORT]);
|
auto port = std::stoi(params[SAM_PARAM_PORT]);
|
||||||
if (port == -1)
|
if (port == -1)
|
||||||
{
|
{
|
||||||
SendI2PError("Invalid port");
|
SendSessionI2PError("Invalid port");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forward = std::make_shared<boost::asio::ip::udp::endpoint>(addr, port);
|
forward = std::make_shared<boost::asio::ip::udp::endpoint>(addr, port);
|
||||||
|
@ -484,7 +484,7 @@ namespace client
|
||||||
LogPrint (eLogDebug, "SAM: Stream connect: ", buf);
|
LogPrint (eLogDebug, "SAM: Stream connect: ", buf);
|
||||||
if ( m_SocketType != eSAMSocketTypeUnknown)
|
if ( m_SocketType != eSAMSocketTypeUnknown)
|
||||||
{
|
{
|
||||||
SendI2PError ("Socket already in use");
|
SendSessionI2PError ("Socket already in use");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::map<std::string, std::string> params;
|
std::map<std::string, std::string> params;
|
||||||
|
@ -582,7 +582,7 @@ namespace client
|
||||||
LogPrint (eLogDebug, "SAM: Stream accept: ", buf);
|
LogPrint (eLogDebug, "SAM: Stream accept: ", buf);
|
||||||
if ( m_SocketType != eSAMSocketTypeUnknown)
|
if ( m_SocketType != eSAMSocketTypeUnknown)
|
||||||
{
|
{
|
||||||
SendI2PError ("Socket already in use");
|
SendSessionI2PError ("Socket already in use");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::map<std::string, std::string> params;
|
std::map<std::string, std::string> params;
|
||||||
|
@ -598,9 +598,15 @@ namespace client
|
||||||
if (!session->GetLocalDestination ()->IsAcceptingStreams ())
|
if (!session->GetLocalDestination ()->IsAcceptingStreams ())
|
||||||
{
|
{
|
||||||
m_IsAccepting = true;
|
m_IsAccepting = true;
|
||||||
|
SendMessageReply (SAM_STREAM_STATUS_OK, strlen(SAM_STREAM_STATUS_OK), false);
|
||||||
session->GetLocalDestination ()->AcceptOnce (std::bind (&SAMSocket::HandleI2PAccept, shared_from_this (), std::placeholders::_1));
|
session->GetLocalDestination ()->AcceptOnce (std::bind (&SAMSocket::HandleI2PAccept, shared_from_this (), std::placeholders::_1));
|
||||||
}
|
}
|
||||||
SendMessageReply (SAM_STREAM_STATUS_OK, strlen(SAM_STREAM_STATUS_OK), false);
|
else // already accepting
|
||||||
|
{
|
||||||
|
// TODO: implement queue
|
||||||
|
LogPrint (eLogInfo, "SAM: Session ", m_ID, " is already accepting");
|
||||||
|
SendStreamI2PError ("Already accepting");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
SendMessageReply (SAM_STREAM_STATUS_INVALID_ID, strlen(SAM_STREAM_STATUS_INVALID_ID), true);
|
||||||
|
@ -620,26 +626,26 @@ namespace client
|
||||||
}
|
}
|
||||||
if (session->GetLocalDestination ()->IsAcceptingStreams ())
|
if (session->GetLocalDestination ()->IsAcceptingStreams ())
|
||||||
{
|
{
|
||||||
SendI2PError ("Already accepting");
|
SendSessionI2PError ("Already accepting");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto it = params.find (SAM_PARAM_PORT);
|
auto it = params.find (SAM_PARAM_PORT);
|
||||||
if (it == params.end ())
|
if (it == params.end ())
|
||||||
{
|
{
|
||||||
SendI2PError ("PORT is missing");
|
SendSessionI2PError ("PORT is missing");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto port = std::stoi (it->second);
|
auto port = std::stoi (it->second);
|
||||||
if (port <= 0 || port >= 0xFFFF)
|
if (port <= 0 || port >= 0xFFFF)
|
||||||
{
|
{
|
||||||
SendI2PError ("Invalid PORT");
|
SendSessionI2PError ("Invalid PORT");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
auto ep = m_Socket.remote_endpoint (ec);
|
auto ep = m_Socket.remote_endpoint (ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
SendI2PError ("Socket error");
|
SendSessionI2PError ("Socket error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ep.port (port);
|
ep.port (port);
|
||||||
|
@ -791,13 +797,13 @@ namespace client
|
||||||
if (type == eSAMSessionTypeUnknown)
|
if (type == eSAMSessionTypeUnknown)
|
||||||
{
|
{
|
||||||
// unknown style
|
// unknown style
|
||||||
SendI2PError("Unsupported STYLE");
|
SendSessionI2PError("Unsupported STYLE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto fromPort = std::stoi(params[SAM_PARAM_FROM_PORT]);
|
auto fromPort = std::stoi(params[SAM_PARAM_FROM_PORT]);
|
||||||
if (fromPort == -1)
|
if (fromPort == -1)
|
||||||
{
|
{
|
||||||
SendI2PError("Invalid from port");
|
SendSessionI2PError("Invalid from port");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto subsession = std::make_shared<SAMSubSession>(masterSession, id, type, fromPort);
|
auto subsession = std::make_shared<SAMSubSession>(masterSession, id, type, fromPort);
|
||||||
|
@ -810,7 +816,7 @@ namespace client
|
||||||
SendMessageReply (SAM_SESSION_CREATE_DUPLICATED_ID, strlen(SAM_SESSION_CREATE_DUPLICATED_ID), false);
|
SendMessageReply (SAM_SESSION_CREATE_DUPLICATED_ID, strlen(SAM_SESSION_CREATE_DUPLICATED_ID), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendI2PError ("Wrong session type");
|
SendSessionI2PError ("Wrong session type");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SAMSocket::ProcessSessionRemove (char * buf, size_t len)
|
void SAMSocket::ProcessSessionRemove (char * buf, size_t len)
|
||||||
|
@ -832,12 +838,12 @@ namespace client
|
||||||
SendSessionCreateReplyOk ();
|
SendSessionCreateReplyOk ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendI2PError ("Wrong session type");
|
SendSessionI2PError ("Wrong session type");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SAMSocket::SendI2PError(const std::string & msg)
|
void SAMSocket::SendSessionI2PError(const std::string & msg)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SAM: I2P error: ", msg);
|
LogPrint (eLogError, "SAM: Session I2P error: ", msg);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_STATUS_I2P_ERROR, msg.c_str());
|
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_SESSION_STATUS_I2P_ERROR, msg.c_str());
|
||||||
#else
|
#else
|
||||||
|
@ -846,6 +852,17 @@ namespace client
|
||||||
SendMessageReply (m_Buffer, len, true);
|
SendMessageReply (m_Buffer, len, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SAMSocket::SendStreamI2PError(const std::string & msg)
|
||||||
|
{
|
||||||
|
LogPrint (eLogError, "SAM: Stream I2P error: ", msg);
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
size_t len = sprintf_s (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_STREAM_STATUS_I2P_ERROR, msg.c_str());
|
||||||
|
#else
|
||||||
|
size_t len = snprintf (m_Buffer, SAM_SOCKET_BUFFER_SIZE, SAM_STREAM_STATUS_I2P_ERROR, msg.c_str());
|
||||||
|
#endif
|
||||||
|
SendMessageReply (m_Buffer, len, true);
|
||||||
|
}
|
||||||
|
|
||||||
void SAMSocket::HandleNamingLookupLeaseSetRequestComplete (std::shared_ptr<i2p::data::LeaseSet> leaseSet, std::string name)
|
void SAMSocket::HandleNamingLookupLeaseSetRequestComplete (std::shared_ptr<i2p::data::LeaseSet> leaseSet, std::string name)
|
||||||
{
|
{
|
||||||
if (leaseSet)
|
if (leaseSet)
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace client
|
||||||
const char SAM_STREAM_STATUS_INVALID_ID[] = "STREAM STATUS RESULT=INVALID_ID\n";
|
const char SAM_STREAM_STATUS_INVALID_ID[] = "STREAM STATUS RESULT=INVALID_ID\n";
|
||||||
const char SAM_STREAM_STATUS_INVALID_KEY[] = "STREAM STATUS RESULT=INVALID_KEY\n";
|
const char SAM_STREAM_STATUS_INVALID_KEY[] = "STREAM STATUS RESULT=INVALID_KEY\n";
|
||||||
const char SAM_STREAM_STATUS_CANT_REACH_PEER[] = "STREAM STATUS RESULT=CANT_REACH_PEER\n";
|
const char SAM_STREAM_STATUS_CANT_REACH_PEER[] = "STREAM STATUS RESULT=CANT_REACH_PEER\n";
|
||||||
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR\n";
|
const char SAM_STREAM_STATUS_I2P_ERROR[] = "STREAM STATUS RESULT=I2P_ERROR MESSAGE=\"%s\"\n";
|
||||||
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
const char SAM_STREAM_ACCEPT[] = "STREAM ACCEPT";
|
||||||
const char SAM_STREAM_FORWARD[] = "STREAM FORWARD";
|
const char SAM_STREAM_FORWARD[] = "STREAM FORWARD";
|
||||||
const char SAM_DATAGRAM_SEND[] = "DATAGRAM SEND";
|
const char SAM_DATAGRAM_SEND[] = "DATAGRAM SEND";
|
||||||
|
@ -141,7 +141,8 @@ namespace client
|
||||||
void ProcessNamingLookup (char * buf, size_t len);
|
void ProcessNamingLookup (char * buf, size_t len);
|
||||||
void ProcessSessionAdd (char * buf, size_t len);
|
void ProcessSessionAdd (char * buf, size_t len);
|
||||||
void ProcessSessionRemove (char * buf, size_t len);
|
void ProcessSessionRemove (char * buf, size_t len);
|
||||||
void SendI2PError(const std::string & msg);
|
void SendSessionI2PError(const std::string & msg);
|
||||||
|
void SendStreamI2PError(const std::string & msg);
|
||||||
size_t ProcessDatagramSend (char * buf, size_t len, const char * data); // from SAM 1.0
|
size_t ProcessDatagramSend (char * buf, size_t len, const char * data); // from SAM 1.0
|
||||||
void ExtractParams (char * buf, std::map<std::string, std::string>& params);
|
void ExtractParams (char * buf, std::map<std::string, std::string>& params);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue