mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-10 01:01:02 +00:00
Merge remote-tracking branch 'purple/openssl' into merge_udp_tunnel
This commit is contained in:
commit
b6b14f4957
14
Garlic.cpp
14
Garlic.cpp
@ -247,7 +247,7 @@ namespace garlic
|
|||||||
|
|
||||||
size_t GarlicRoutingSession::CreateGarlicPayload (uint8_t * payload, std::shared_ptr<const I2NPMessage> msg, UnconfirmedTags * newTags)
|
size_t GarlicRoutingSession::CreateGarlicPayload (uint8_t * payload, std::shared_ptr<const I2NPMessage> msg, UnconfirmedTags * newTags)
|
||||||
{
|
{
|
||||||
uint64_t ts = i2p::util::GetMillisecondsSinceEpoch () + 8000; // 8 sec
|
uint64_t ts = i2p::util::GetMillisecondsSinceEpoch ();
|
||||||
uint32_t msgID;
|
uint32_t msgID;
|
||||||
RAND_bytes ((uint8_t *)&msgID, 4);
|
RAND_bytes ((uint8_t *)&msgID, 4);
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
@ -258,9 +258,11 @@ namespace garlic
|
|||||||
if (m_Owner)
|
if (m_Owner)
|
||||||
{
|
{
|
||||||
// resubmit non-confirmed LeaseSet
|
// resubmit non-confirmed LeaseSet
|
||||||
if (m_LeaseSetUpdateStatus == eLeaseSetSubmitted &&
|
if (m_LeaseSetUpdateStatus == eLeaseSetSubmitted && ts > m_LeaseSetSubmissionTime + LEASET_CONFIRMATION_TIMEOUT)
|
||||||
i2p::util::GetMillisecondsSinceEpoch () > m_LeaseSetSubmissionTime + LEASET_CONFIRMATION_TIMEOUT)
|
{
|
||||||
m_LeaseSetUpdateStatus = eLeaseSetUpdated;
|
m_LeaseSetUpdateStatus = eLeaseSetUpdated;
|
||||||
|
SetSharedRoutingPath (nullptr); // invalidate path since leaseset was not confirmed
|
||||||
|
}
|
||||||
|
|
||||||
// attach DeviveryStatus if necessary
|
// attach DeviveryStatus if necessary
|
||||||
if (newTags || m_LeaseSetUpdateStatus == eLeaseSetUpdated) // new tags created or leaseset updated
|
if (newTags || m_LeaseSetUpdateStatus == eLeaseSetUpdated) // new tags created or leaseset updated
|
||||||
@ -286,7 +288,7 @@ namespace garlic
|
|||||||
{
|
{
|
||||||
m_LeaseSetUpdateStatus = eLeaseSetSubmitted;
|
m_LeaseSetUpdateStatus = eLeaseSetSubmitted;
|
||||||
m_LeaseSetUpdateMsgID = msgID;
|
m_LeaseSetUpdateMsgID = msgID;
|
||||||
m_LeaseSetSubmissionTime = i2p::util::GetMillisecondsSinceEpoch ();
|
m_LeaseSetSubmissionTime = ts;
|
||||||
// clove if our leaseSet must be attached
|
// clove if our leaseSet must be attached
|
||||||
auto leaseSet = CreateDatabaseStoreMsg (m_Owner->GetLeaseSet ());
|
auto leaseSet = CreateDatabaseStoreMsg (m_Owner->GetLeaseSet ());
|
||||||
size += CreateGarlicClove (payload + size, leaseSet, false);
|
size += CreateGarlicClove (payload + size, leaseSet, false);
|
||||||
@ -303,7 +305,7 @@ namespace garlic
|
|||||||
size += 3;
|
size += 3;
|
||||||
htobe32buf (payload + size, msgID); // MessageID
|
htobe32buf (payload + size, msgID); // MessageID
|
||||||
size += 4;
|
size += 4;
|
||||||
htobe64buf (payload + size, ts); // Expiration of message
|
htobe64buf (payload + size, ts + 8000); // Expiration of message, 8 sec
|
||||||
size += 8;
|
size += 8;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
1
Garlic.h
1
Garlic.h
@ -104,6 +104,7 @@ namespace garlic
|
|||||||
{
|
{
|
||||||
if (m_LeaseSetUpdateStatus != eLeaseSetDoNotSend) m_LeaseSetUpdateStatus = eLeaseSetUpdated;
|
if (m_LeaseSetUpdateStatus != eLeaseSetDoNotSend) m_LeaseSetUpdateStatus = eLeaseSetUpdated;
|
||||||
};
|
};
|
||||||
|
bool IsLeaseSetNonConfirmed () const { return m_LeaseSetUpdateStatus == eLeaseSetSubmitted; };
|
||||||
|
|
||||||
std::shared_ptr<GarlicRoutingPath> GetSharedRoutingPath ();
|
std::shared_ptr<GarlicRoutingPath> GetSharedRoutingPath ();
|
||||||
void SetSharedRoutingPath (std::shared_ptr<GarlicRoutingPath> path);
|
void SetSharedRoutingPath (std::shared_ptr<GarlicRoutingPath> path);
|
||||||
|
@ -829,7 +829,13 @@ namespace http {
|
|||||||
std::shared_ptr<boost::asio::ip::tcp::socket> newSocket)
|
std::shared_ptr<boost::asio::ip::tcp::socket> newSocket)
|
||||||
{
|
{
|
||||||
if (ecode)
|
if (ecode)
|
||||||
|
{
|
||||||
|
if(newSocket) newSocket->close();
|
||||||
|
LogPrint(eLogError, "HTTP Server: error handling accept ", ecode.message());
|
||||||
|
if(ecode != boost::asio::error::operation_aborted)
|
||||||
|
Accept();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
CreateConnection(newSocket);
|
CreateConnection(newSocket);
|
||||||
Accept ();
|
Accept ();
|
||||||
}
|
}
|
||||||
|
@ -741,7 +741,15 @@ namespace stream
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (m_Status == eStreamStatusOpen)
|
if (m_Status == eStreamStatusOpen)
|
||||||
|
{
|
||||||
|
if (m_RoutingSession && m_RoutingSession->IsLeaseSetNonConfirmed ())
|
||||||
|
{
|
||||||
|
// seems something went wrong and we should re-select tunnels
|
||||||
|
m_CurrentOutboundTunnel = nullptr;
|
||||||
|
m_CurrentRemoteLease = nullptr;
|
||||||
|
}
|
||||||
SendQuickAck ();
|
SendQuickAck ();
|
||||||
|
}
|
||||||
m_IsAckSendScheduled = false;
|
m_IsAckSendScheduled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,14 @@ endif()
|
|||||||
# TODO: once CMake 3.1+ becomes mainstream, see e.g. http://stackoverflow.com/a/29871891/673826
|
# TODO: once CMake 3.1+ becomes mainstream, see e.g. http://stackoverflow.com/a/29871891/673826
|
||||||
# use imported Threads::Threads instead
|
# use imported Threads::Threads instead
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package ( Threads REQUIRED )
|
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
|
if(THREADS_HAVE_PTHREAD_ARG) # compile time flag
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
||||||
endif()
|
endif()
|
||||||
|
85
docs/build_notes_ios.md
Normal file
85
docs/build_notes_ios.md
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
Building on iOS
|
||||||
|
===================
|
||||||
|
|
||||||
|
How to build i2pd for iOS 9 and iOS Simulator 386/x64
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
--------------
|
||||||
|
|
||||||
|
XCode7+, cmake 3.2+
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
--------------
|
||||||
|
- precompiled openssl
|
||||||
|
- precompiled boost with modules `filesystem`, `program_options`, `date_time` and `system`
|
||||||
|
- ios-cmake toolchain from https://github.com/vovasty/ios-cmake.git
|
||||||
|
|
||||||
|
Building
|
||||||
|
------------------------
|
||||||
|
Assume you have folder structure
|
||||||
|
|
||||||
|
```
|
||||||
|
lib
|
||||||
|
libboost_date_time.a
|
||||||
|
libboost_filesystem.a
|
||||||
|
libboost_program_options.a
|
||||||
|
libboost_system.a
|
||||||
|
libboost.a
|
||||||
|
libcrypto.a
|
||||||
|
libssl.a
|
||||||
|
include
|
||||||
|
boost
|
||||||
|
openssl
|
||||||
|
ios-cmake
|
||||||
|
i2pd
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p build/simulator/lib build/ios/lib include/i2pd
|
||||||
|
|
||||||
|
pushd build/simulator && \
|
||||||
|
cmake -DIOS_PLATFORM=SIMULATOR \
|
||||||
|
-DPATCH=/usr/bin/patch \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
|
||||||
|
-DWITH_STATIC=yes \
|
||||||
|
-DWITH_BINARY=no \
|
||||||
|
-DBoost_INCLUDE_DIR=../../include \
|
||||||
|
-DOPENSSL_INCLUDE_DIR=../../include \
|
||||||
|
-DBoost_LIBRARY_DIR=../../lib \
|
||||||
|
-DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
|
||||||
|
-DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
|
||||||
|
../../i2pd/build && \
|
||||||
|
make -j16 VERBOSE=1 && \
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd build/ios
|
||||||
|
cmake -DIOS_PLATFORM=OS \
|
||||||
|
-DPATCH=/usr/bin/patch \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
|
||||||
|
-DWITH_STATIC=yes \
|
||||||
|
-DWITH_BINARY=no \
|
||||||
|
-DBoost_INCLUDE_DIR=../../include \
|
||||||
|
-DOPENSSL_INCLUDE_DIR=../../include \
|
||||||
|
-DBoost_LIBRARY_DIR=../../lib \
|
||||||
|
-DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
|
||||||
|
-DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
|
||||||
|
../../i2pd/build && \
|
||||||
|
make -j16 VERBOSE=1 && \
|
||||||
|
popd
|
||||||
|
|
||||||
|
libtool -static -o lib/libi2pdclient.a build/*/libi2pdclient.a
|
||||||
|
libtool -static -o lib/libi2pd.a build/*/libi2pd.a
|
||||||
|
|
||||||
|
cp i2pd/*.h include/i2pd
|
||||||
|
```
|
||||||
|
|
||||||
|
Include into project
|
||||||
|
---------------------------
|
||||||
|
1. add all libraries in `lib` folder to `Project linked frameworks`.
|
||||||
|
2. add `libc++` and `libz` libraries from system libraries to `Project linked frameworks`.
|
||||||
|
3. add path to i2p headers to your `Headers search paths`
|
||||||
|
|
||||||
|
Alternatively you may use swift wrapper https://github.com/vovasty/SwiftyI2P.git
|
@ -35,5 +35,6 @@ Contents:
|
|||||||
build_notes_android
|
build_notes_android
|
||||||
configuration
|
configuration
|
||||||
family
|
family
|
||||||
|
usage
|
||||||
|
|
||||||
|
|
||||||
|
130
docs/usage.md
Normal file
130
docs/usage.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
Usage and tutorials
|
||||||
|
===================
|
||||||
|
|
||||||
|
|
||||||
|
i2pd can be used for:
|
||||||
|
|
||||||
|
* [anonymous websites](#browsing-and-hosting-websites)
|
||||||
|
* [anonymous chats](#using-and-hosting-chat-servers)
|
||||||
|
* [anonymous file sharing](#file-sharing)
|
||||||
|
|
||||||
|
and many more.
|
||||||
|
|
||||||
|
## Browsing and hosting websites
|
||||||
|
|
||||||
|
### Browse anonymous websites
|
||||||
|
|
||||||
|
To browse anonymous websites inside Invisible Internet, configure your web browser to use HTTP proxy 127.0.0.1:4444 (available by default in i2pd).
|
||||||
|
|
||||||
|
In Firefox: Preferences -> Advanced -> Network tab -> Connection Settings -> choose Manual proxy configuration, Enter HTTP proxy 127.0.0.1, Port 4444
|
||||||
|
|
||||||
|
In Chromium: run chromium executable with key
|
||||||
|
|
||||||
|
chromium --proxy-server="http://127.0.0.1:4444"
|
||||||
|
|
||||||
|
Note that if you wish to stay anonymous too you'll need to tune your browser for better privacy. Do your own research, [can start here](http://www.howtogeek.com/102032/how-to-optimize-mozilla-firefox-for-maximum-privacy/).
|
||||||
|
|
||||||
|
Big list of Invisible Internet websites can be found at [identiguy.i2p](http://identiguy.i2p).
|
||||||
|
|
||||||
|
### Host anonymous website
|
||||||
|
|
||||||
|
|
||||||
|
If you wish to run your own website in Invisible Internet, follow those steps:
|
||||||
|
|
||||||
|
1) Run your webserver and find out which host:port it uses (for example, 127.0.0.1:8080).
|
||||||
|
|
||||||
|
2) Configure i2pd to create HTTP server tunnel. Put in your ~/.i2pd/tunnels.conf file:
|
||||||
|
|
||||||
|
[anon-website]
|
||||||
|
type = http
|
||||||
|
host = 127.0.0.1
|
||||||
|
port = 8080
|
||||||
|
keys = anon-website.dat
|
||||||
|
|
||||||
|
3) Restart i2pd.
|
||||||
|
|
||||||
|
4) Find b32 destination of your website.
|
||||||
|
|
||||||
|
Go to webconsole -> [I2P tunnels page](http://127.0.0.1:7070/?page=i2p_tunnels). Look for Sever tunnels and you will see address like \<long random string\>.b32.i2p next to anon-website.
|
||||||
|
|
||||||
|
Website is now available in Invisible Internet by visiting this address.
|
||||||
|
|
||||||
|
5) (Optional) Register short and rememberable .i2p domain on [inr.i2p](http://inr.i2p).
|
||||||
|
|
||||||
|
|
||||||
|
## Using and hosting chat servers
|
||||||
|
|
||||||
|
### Running anonymous IRC server
|
||||||
|
|
||||||
|
1) Run your IRC server software and find out which host:port it uses (for example, 127.0.0.1:5555).
|
||||||
|
|
||||||
|
For small private IRC servers you can use [miniircd](https://github.com/jrosdahl/miniircd), for large public networks [UnreadIRCd](https://www.unrealircd.org/).
|
||||||
|
|
||||||
|
2) Configure i2pd to create IRC server tunnel.
|
||||||
|
|
||||||
|
Simplest case, if your server does not support WebIRC, add this to ~/.i2pd/tunnels.conf:
|
||||||
|
|
||||||
|
[anon-chatserver]
|
||||||
|
type = irc
|
||||||
|
host = 127.0.0.1
|
||||||
|
port = 5555
|
||||||
|
keys = chatserver-key.dat
|
||||||
|
|
||||||
|
And that is it.
|
||||||
|
|
||||||
|
Alternatively, if your IRC server supports WebIRC, for example, UnreadIRCd, put this into UnrealIRCd config:
|
||||||
|
|
||||||
|
webirc {
|
||||||
|
mask 127.0.0.1;
|
||||||
|
password your_password;
|
||||||
|
};
|
||||||
|
|
||||||
|
Also change line:
|
||||||
|
|
||||||
|
modes-on-connect "+ixw";
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
modes-on-connect "+iw";
|
||||||
|
|
||||||
|
And this in ~/.i2pd/tunnels.conf:
|
||||||
|
|
||||||
|
[anon-chatserver]
|
||||||
|
type = irc
|
||||||
|
host = 127.0.0.1
|
||||||
|
port = 5555
|
||||||
|
keys = chatserver-key.dat
|
||||||
|
webircpassword = your_password
|
||||||
|
|
||||||
|
3) Restart i2pd.
|
||||||
|
|
||||||
|
4) Find b32 destination of your anonymous IRC server.
|
||||||
|
|
||||||
|
Go to webconsole -> [I2P tunnels page](http://127.0.0.1:7070/?page=i2p_tunnels). Look for Sever tunnels and you will see address like \<long random string\>.b32.i2p next to anon-chatserver.
|
||||||
|
|
||||||
|
Clients will use this address to connect to your server anonymously.
|
||||||
|
|
||||||
|
### Connect to anonymous IRC server
|
||||||
|
|
||||||
|
To connect to IRC server at *walker.i2p*, add this to ~/.i2pd/tunnels.conf:
|
||||||
|
|
||||||
|
[IRC2]
|
||||||
|
type = client
|
||||||
|
address = 127.0.0.1
|
||||||
|
port = 6669
|
||||||
|
destination = walker.i2p
|
||||||
|
#keys = walker-keys.dat
|
||||||
|
|
||||||
|
Restart i2pd, then connect to irc://127.0.0.1:6669 with your IRC client.
|
||||||
|
|
||||||
|
## File sharing
|
||||||
|
|
||||||
|
You can share and download torrents with [Transmission-I2P](https://github.com/l-n-s/transmission-i2p).
|
||||||
|
|
||||||
|
Alternative torrent-clients are [Robert](http://en.wikipedia.org/wiki/Robert_%28P2P_Software%29) and [Vuze](https://en.wikipedia.org/wiki/Vuze).
|
||||||
|
|
||||||
|
Robert uses BOB protocol, i2pd must be run with parameter --bob.enabled=true.
|
||||||
|
|
||||||
|
Vuze uses I2CP protocol, i2pd must be run with parameter --i2cp.enabled=true.
|
||||||
|
|
||||||
|
Also, visit [postman tracker](http://tracker2.postman.i2p).
|
Loading…
x
Reference in New Issue
Block a user