1
0
mirror of https://github.com/PurpleI2P/i2pd.git synced 2025-01-15 09:39:58 +00:00
i2pd/ClientContext.h

103 lines
3.9 KiB
C
Raw Permalink Normal View History

2014-10-15 20:52:17 -04:00
#ifndef CLIENT_CONTEXT_H__
#define CLIENT_CONTEXT_H__
#include <map>
2014-10-15 20:52:17 -04:00
#include <mutex>
2015-02-12 16:11:56 -05:00
#include <memory>
#include <boost/asio.hpp>
2014-10-15 20:52:17 -04:00
#include "Destination.h"
#include "I2PService.h"
#include "HTTPProxy.h"
#include "SOCKS.h"
#include "I2PTunnel.h"
#include "SAM.h"
2014-12-02 10:34:02 -05:00
#include "BOB.h"
2016-05-12 15:37:46 -04:00
#include "I2CP.h"
2014-10-24 15:22:36 -04:00
#include "AddressBook.h"
2014-10-15 20:52:17 -04:00
namespace i2p
{
namespace client
{
2015-03-13 19:51:31 -04:00
const char I2P_TUNNELS_SECTION_TYPE[] = "type";
const char I2P_TUNNELS_SECTION_TYPE_CLIENT[] = "client";
const char I2P_TUNNELS_SECTION_TYPE_SERVER[] = "server";
2015-05-20 16:00:09 -04:00
const char I2P_TUNNELS_SECTION_TYPE_HTTP[] = "http";
2016-02-23 00:33:21 +05:00
const char I2P_TUNNELS_SECTION_TYPE_IRC[] = "irc";
2015-03-13 19:51:31 -04:00
const char I2P_CLIENT_TUNNEL_PORT[] = "port";
2015-11-30 16:44:32 +02:00
const char I2P_CLIENT_TUNNEL_ADDRESS[] = "address";
2015-03-13 19:51:31 -04:00
const char I2P_CLIENT_TUNNEL_DESTINATION[] = "destination";
const char I2P_CLIENT_TUNNEL_KEYS[] = "keys";
2016-01-03 21:43:43 -05:00
const char I2P_CLIENT_TUNNEL_SIGNATURE_TYPE[] = "signaturetype";
2015-03-13 19:51:31 -04:00
const char I2P_CLIENT_TUNNEL_DESTINATION_PORT[] = "destinationport";
const char I2P_SERVER_TUNNEL_HOST[] = "host";
2016-02-25 20:32:05 -05:00
const char I2P_SERVER_TUNNEL_HOST_OVERRIDE[] = "hostoverride";
2015-03-13 19:51:31 -04:00
const char I2P_SERVER_TUNNEL_PORT[] = "port";
const char I2P_SERVER_TUNNEL_KEYS[] = "keys";
2016-01-03 21:43:43 -05:00
const char I2P_SERVER_TUNNEL_SIGNATURE_TYPE[] = "signaturetype";
const char I2P_SERVER_TUNNEL_INPORT[] = "inport";
2015-03-16 14:52:42 -04:00
const char I2P_SERVER_TUNNEL_ACCESS_LIST[] = "accesslist";
2016-03-04 11:37:38 +05:00
const char I2P_SERVER_TUNNEL_GZIP[] = "gzip";
const char I2P_SERVER_TUNNEL_WEBIRC_PASSWORD[] = "webircpassword";
2015-02-12 16:11:56 -05:00
2014-10-15 20:52:17 -04:00
class ClientContext
{
public:
ClientContext ();
~ClientContext ();
2014-10-15 20:52:17 -04:00
void Start ();
void Stop ();
void ReloadConfig ();
2015-02-24 15:40:50 -05:00
std::shared_ptr<ClientDestination> GetSharedLocalDestination () const { return m_SharedLocalDestination; };
std::shared_ptr<ClientDestination> CreateNewLocalDestination (bool isPublic = false, i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_DSA_SHA1,
const std::map<std::string, std::string> * params = nullptr); // transient
2015-02-24 15:40:50 -05:00
std::shared_ptr<ClientDestination> CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic = true,
const std::map<std::string, std::string> * params = nullptr);
2015-02-24 15:40:50 -05:00
void DeleteLocalDestination (std::shared_ptr<ClientDestination> destination);
std::shared_ptr<ClientDestination> FindLocalDestination (const i2p::data::IdentHash& destination) const;
2016-01-15 14:46:29 -05:00
void LoadPrivateKeys (i2p::data::PrivateKeys& keys, const std::string& filename, i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256);
2014-10-15 20:52:17 -04:00
2014-10-24 15:22:36 -04:00
AddressBook& GetAddressBook () { return m_AddressBook; };
const SAMBridge * GetSAMBridge () const { return m_SamBridge; };
2015-02-12 16:11:56 -05:00
private:
void ReadTunnels ();
2016-01-15 12:24:40 -05:00
template<typename Section, typename Type>
std::string GetI2CPOption (const Section& section, const std::string& name, const Type& value) const;
template<typename Section>
void ReadI2CPOptions (const Section& section, std::map<std::string, std::string>& options) const;
2014-10-15 20:52:17 -04:00
private:
std::mutex m_DestinationsMutex;
2015-02-24 15:40:50 -05:00
std::map<i2p::data::IdentHash, std::shared_ptr<ClientDestination> > m_Destinations;
std::shared_ptr<ClientDestination> m_SharedLocalDestination;
2014-10-15 20:52:17 -04:00
2014-10-24 15:22:36 -04:00
AddressBook m_AddressBook;
i2p::proxy::HTTPProxy * m_HttpProxy;
i2p::proxy::SOCKSProxy * m_SocksProxy;
std::map<boost::asio::ip::tcp::endpoint, std::unique_ptr<I2PClientTunnel> > m_ClientTunnels; // local endpoint->tunnel
std::map<std::pair<i2p::data::IdentHash, int>, std::unique_ptr<I2PServerTunnel> > m_ServerTunnels; // <destination,port>->tunnel
SAMBridge * m_SamBridge;
2014-12-02 10:34:02 -05:00
BOBCommandChannel * m_BOBCommandChannel;
2016-05-12 15:37:46 -04:00
I2CPServer * m_I2CPServer;
2014-10-15 20:52:17 -04:00
public:
// for HTTP
const decltype(m_Destinations)& GetDestinations () const { return m_Destinations; };
2016-01-13 20:21:53 -05:00
const decltype(m_ClientTunnels)& GetClientTunnels () const { return m_ClientTunnels; };
const decltype(m_ServerTunnels)& GetServerTunnels () const { return m_ServerTunnels; };
2014-10-15 20:52:17 -04:00
};
extern ClientContext context;
}
}
#endif