i2pd/TransportSession.h

86 lines
2.1 KiB
C
Raw Normal View History

2014-10-20 20:09:59 +00:00
#ifndef TRANSPORT_SESSION_H__
#define TRANSPORT_SESSION_H__
#include <inttypes.h>
#include <iostream>
#include <memory>
2015-01-21 02:05:57 +00:00
#include <vector>
#include "Identity.h"
2015-11-03 14:15:49 +00:00
#include "Crypto.h"
#include "RouterInfo.h"
#include "I2NPProtocol.h"
2014-10-20 20:09:59 +00:00
namespace i2p
{
namespace transport
{
class SignedData
{
public:
2015-11-03 14:15:49 +00:00
SignedData () {}
SignedData (const SignedData& other)
{
m_Stream << other.m_Stream.rdbuf ();
}
void Insert (const uint8_t * buf, size_t len)
{
m_Stream.write ((char *)buf, len);
}
template<typename T>
void Insert (T t)
{
m_Stream.write ((char *)&t, sizeof (T));
}
2015-11-03 14:15:49 +00:00
bool Verify (std::shared_ptr<const i2p::data::IdentityEx> ident, const uint8_t * signature) const
{
2015-11-03 14:15:49 +00:00
return ident->Verify ((const uint8_t *)m_Stream.str ().c_str (), m_Stream.str ().size (), signature);
}
void Sign (const i2p::data::PrivateKeys& keys, uint8_t * signature) const
{
keys.Sign ((const uint8_t *)m_Stream.str ().c_str (), m_Stream.str ().size (), signature);
}
private:
std::stringstream m_Stream;
};
2014-10-20 20:09:59 +00:00
class TransportSession
{
public:
2015-11-03 14:15:49 +00:00
TransportSession (std::shared_ptr<const i2p::data::RouterInfo> router):
m_DHKeysPair (nullptr), m_NumSentBytes (0), m_NumReceivedBytes (0), m_IsOutgoing (router)
{
2015-11-03 14:15:49 +00:00
if (router)
m_RemoteIdentity = router->GetRouterIdentity ();
}
2015-11-03 14:15:49 +00:00
virtual ~TransportSession () {};
2015-02-07 01:53:48 +00:00
virtual void Done () = 0;
2014-10-20 20:09:59 +00:00
2015-11-03 14:15:49 +00:00
std::shared_ptr<const i2p::data::IdentityEx> GetRemoteIdentity () { return m_RemoteIdentity; };
void SetRemoteIdentity (std::shared_ptr<const i2p::data::IdentityEx> ident) { m_RemoteIdentity = ident; };
size_t GetNumSentBytes () const { return m_NumSentBytes; };
size_t GetNumReceivedBytes () const { return m_NumReceivedBytes; };
2015-11-03 14:15:49 +00:00
bool IsOutgoing () const { return m_IsOutgoing; };
virtual void SendI2NPMessages (const std::vector<std::shared_ptr<I2NPMessage> >& msgs) = 0;
2014-10-20 20:09:59 +00:00
protected:
2015-11-03 14:15:49 +00:00
std::shared_ptr<const i2p::data::IdentityEx> m_RemoteIdentity;
std::shared_ptr<i2p::crypto::DHKeys> m_DHKeysPair; // X - for client and Y - for server
size_t m_NumSentBytes, m_NumReceivedBytes;
2015-11-03 14:15:49 +00:00
bool m_IsOutgoing;
2014-10-20 20:09:59 +00:00
};
}
}
#endif