mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 11:47:48 +02:00
RouterInfo added
This commit is contained in:
parent
595c745c90
commit
bc599a7d8f
2 changed files with 348 additions and 0 deletions
89
RouterInfo.h
Normal file
89
RouterInfo.h
Normal file
|
@ -0,0 +1,89 @@
|
|||
#ifndef ROUTER_INFO_H__
|
||||
#define ROUTER_INFO_H__
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <boost/asio.hpp>
|
||||
|
||||
namespace i2p
|
||||
{
|
||||
namespace data
|
||||
{
|
||||
#pragma pack (1)
|
||||
|
||||
struct RouterIdentity
|
||||
{
|
||||
uint8_t publicKey[256];
|
||||
uint8_t signingKey[128];
|
||||
uint8_t certificate[3];
|
||||
};
|
||||
#pragma pack ()
|
||||
|
||||
|
||||
class RouterInfo
|
||||
{
|
||||
public:
|
||||
|
||||
enum TransportStyle
|
||||
{
|
||||
eTransportUnknown = 0,
|
||||
eTransportNTCP,
|
||||
eTransportSSU
|
||||
};
|
||||
|
||||
struct Address
|
||||
{
|
||||
TransportStyle transportStyle;
|
||||
std::string host;
|
||||
int port;
|
||||
uint64_t date;
|
||||
uint8_t cost;
|
||||
};
|
||||
|
||||
RouterInfo (const char * filename);
|
||||
RouterInfo () = default;
|
||||
RouterInfo (const RouterInfo& ) = default;
|
||||
RouterInfo (const uint8_t * buf, int len);
|
||||
|
||||
const RouterIdentity& GetRouterIdentity () const { return m_RouterIdentity; };
|
||||
void SetRouterIdentity (const RouterIdentity& identity);
|
||||
const uint8_t * GetIdentHash () const { return m_IdentHash; };
|
||||
const std::vector<Address>& GetAddresses () const { return m_Addresses; };
|
||||
Address * GetNTCPAddress ();
|
||||
|
||||
void AddNTCPAddress (const char * host, int port);
|
||||
void SetProperty (const char * key, const char * value);
|
||||
const char * GetProperty (const char * key) const;
|
||||
bool IsFloodfill () const;
|
||||
bool IsNTCP () const;
|
||||
|
||||
void CreateBuffer ();
|
||||
const char * GetBuffer () const { return m_Buffer; };
|
||||
int GetBufferLen () const { return m_BufferLen; };
|
||||
|
||||
private:
|
||||
|
||||
void ReadFromFile (const char * filename);
|
||||
void ReadFromStream (std::istream& s);
|
||||
void ReadFromBuffer ();
|
||||
void WriteToStream (std::ostream& s);
|
||||
size_t ReadString (char * str, std::istream& s);
|
||||
void WriteString (const std::string& str, std::ostream& s);
|
||||
|
||||
private:
|
||||
|
||||
RouterIdentity m_RouterIdentity;
|
||||
uint8_t m_IdentHash[32];
|
||||
char m_Buffer[2048];
|
||||
int m_BufferLen;
|
||||
uint64_t m_Timestamp;
|
||||
std::vector<Address> m_Addresses;
|
||||
std::map<std::string, std::string> m_Properties;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue