@ -14,11 +14,9 @@ namespace i2p
{
{
namespace api
namespace api
{
{
static std : : map < i2p : : data : : IdentHash , i2p : : client : : ClientDestination * > g_Destinations ;
void InitI2P ( int argc , char * argv [ ] , const char * appName )
void InitI2P ( int argc , char * argv [ ] )
{
{
i2p : : util : : filesystem : : SetAppName ( " i2papi " ) ;
i2p : : util : : filesystem : : SetAppName ( appName ) ;
i2p : : util : : config : : OptionParser ( argc , argv ) ;
i2p : : util : : config : : OptionParser ( argc , argv ) ;
i2p : : context . Init ( ) ;
i2p : : context . Init ( ) ;
}
}
@ -43,29 +41,19 @@ namespace api
LogPrint ( " Transports stoped " ) ;
LogPrint ( " Transports stoped " ) ;
i2p : : data : : netdb . Stop ( ) ;
i2p : : data : : netdb . Stop ( ) ;
LogPrint ( " NetDB stoped " ) ;
LogPrint ( " NetDB stoped " ) ;
for ( auto it : g_Destinations )
{
it . second - > Stop ( ) ;
delete it . second ;
}
g_Destinations . clear ( ) ;
LogPrint ( " Local destinations deleted " ) ;
StopLog ( ) ;
StopLog ( ) ;
}
}
i2p : : client : : ClientDestination * CreateLocalDestination ( const i2p : : data : : PrivateKeys & keys )
i2p : : client : : ClientDestination * CreateLocalDestination ( const i2p : : data : : PrivateKeys & keys , bool isPublic )
{
{
auto localDestination = new i2p : : client : : ClientDestination ( keys , true ) ; // public
auto localDestination = new i2p : : client : : ClientDestination ( keys , isPublic ) ;
g_Destinations [ localDestination - > GetIdentHash ( ) ] = localDestination ;
localDestination - > Start ( ) ;
localDestination - > Start ( ) ;
return localDestination ;
return localDestination ;
}
}
i2p : : client : : ClientDestination * CreateLocalDestination ( i2p : : data : : SigningKeyType sigType )
i2p : : client : : ClientDestination * CreateLocalDestination ( bool isPublic , i2p : : data : : SigningKeyType sigType )
{
{
auto localDestination = new i2p : : client : : ClientDestination ( true , sigType ) ; // public
auto localDestination = new i2p : : client : : ClientDestination ( isPublic , sigType ) ;
g_Destinations [ localDestination - > GetIdentHash ( ) ] = localDestination ;
localDestination - > Start ( ) ;
localDestination - > Start ( ) ;
return localDestination ;
return localDestination ;
}
}
@ -75,10 +63,46 @@ namespace api
if ( dest )
if ( dest )
{
{
dest - > Stop ( ) ;
dest - > Stop ( ) ;
g_Destinations . erase ( dest - > GetIdentHash ( ) ) ;
delete dest ;
delete dest ;
}
}
}
}
void RequestLeaseSet ( i2p : : client : : ClientDestination * dest , const i2p : : data : : IdentHash & remote )
{
if ( dest )
i2p : : data : : netdb . RequestDestination ( remote , true , dest - > GetTunnelPool ( ) ) ;
}
i2p : : stream : : Stream * CreateStream ( i2p : : client : : ClientDestination * dest , const i2p : : data : : IdentHash & remote )
{
auto leaseSet = i2p : : data : : netdb . FindLeaseSet ( remote ) ;
if ( leaseSet )
{
auto stream = dest - > CreateStream ( * leaseSet ) ;
stream - > Send ( nullptr , 0 ) ; // connect
return stream ;
}
else
{
RequestLeaseSet ( dest , remote ) ;
return nullptr ;
}
}
void AcceptStream ( i2p : : client : : ClientDestination * dest , const i2p : : stream : : StreamingDestination : : Acceptor & acceptor )
{
if ( dest )
dest - > AcceptStreams ( acceptor ) ;
}
void DestroyStream ( i2p : : stream : : Stream * stream )
{
if ( stream )
{
stream - > Close ( ) ;
i2p : : stream : : DeleteStream ( stream ) ;
}
}
}
}
}
}