lokinet/llarp/service/sendcontext.hpp

80 lines
2.0 KiB
C++
Raw Normal View History

2019-04-19 16:02:32 +00:00
#ifndef LLARP_SERVICE_SENDCONTEXT_HPP
#define LLARP_SERVICE_SENDCONTEXT_HPP
2019-06-15 14:55:14 +00:00
2019-04-19 16:02:32 +00:00
#include <path/pathset.hpp>
2019-06-19 22:30:07 +00:00
#include <routing/path_transfer_message.hpp>
#include <service/intro.hpp>
2019-04-19 16:02:32 +00:00
#include <service/protocol.hpp>
#include <util/buffer.hpp>
#include <util/types.hpp>
2020-01-06 21:08:31 +00:00
#include <util/thread/queue.hpp>
2019-06-15 14:55:14 +00:00
2019-04-25 17:15:56 +00:00
#include <deque>
2019-04-19 16:02:32 +00:00
namespace llarp
{
namespace service
{
struct ServiceInfo;
struct Endpoint;
struct Introduction;
struct SendContext
{
2019-07-30 23:42:13 +00:00
SendContext(ServiceInfo ident, const Introduction& intro,
2019-04-19 16:02:32 +00:00
path::PathSet* send, Endpoint* ep);
void
AsyncEncryptAndSendTo(const llarp_buffer_t& payload, ProtocolType t);
2019-04-25 17:15:56 +00:00
/// queue send a fully encrypted hidden service frame
/// via a path
2019-04-19 16:02:32 +00:00
bool
2020-01-06 21:08:31 +00:00
Send(std::shared_ptr< ProtocolFrame > f, path::Path_ptr path);
2019-04-25 17:15:56 +00:00
/// flush upstream traffic when in router thread
2019-04-25 17:15:56 +00:00
void
2020-01-06 21:08:31 +00:00
FlushUpstream();
2019-04-19 16:02:32 +00:00
SharedSecret sharedKey;
ServiceInfo remoteIdent;
Introduction remoteIntro;
ConvoTag currentConvoTag;
path::PathSet* const m_PathSet;
IDataHandler* const m_DataHandler;
Endpoint* const m_Endpoint;
2019-04-19 16:02:32 +00:00
uint64_t sequenceNo = 0;
2020-02-24 19:40:45 +00:00
llarp_time_t lastGoodSend = 0s;
const llarp_time_t createdAt;
llarp_time_t sendTimeout = 40s;
llarp_time_t connectTimeout = 60s;
2019-04-19 16:02:32 +00:00
bool markedBad = false;
2019-04-25 17:15:56 +00:00
using Msg_ptr = std::shared_ptr< const routing::PathTransferMessage >;
using SendEvent_t = std::pair< Msg_ptr, path::Path_ptr >;
2020-01-06 21:08:31 +00:00
thread::Queue< SendEvent_t > m_SendQueue;
2019-04-19 16:02:32 +00:00
virtual bool
ShiftIntroduction(bool rebuild = true)
{
(void)rebuild;
return true;
}
2019-04-19 16:02:32 +00:00
virtual void
UpdateIntroSet() = 0;
2019-04-19 16:02:32 +00:00
virtual bool
MarkCurrentIntroBad(llarp_time_t now) = 0;
private:
void
EncryptAndSendTo(const llarp_buffer_t& payload, ProtocolType t);
virtual void
AsyncGenIntro(const llarp_buffer_t& payload, ProtocolType t) = 0;
};
} // namespace service
} // namespace llarp
#endif