lokinet/llarp/link/factory.hpp
Thomas Winget 7caa87862e standardize include format and pragma once
All #ifndef guards on headers have been removed, I think,
in favor of #pragma once

Headers are now included as `#include "filename"` if the included file
resides in the same directory as the file including it, or any
subdirectory therein.  Otherwise they are included as
`#include <project/top/dir/relative/path/filename>`

The above does not include system/os headers.
2021-03-09 19:01:41 -05:00

49 lines
1.1 KiB
C++

#pragma once
#include <llarp/config/key_manager.hpp>
#include <string_view>
#include <functional>
#include <memory>
#include "server.hpp"
namespace llarp
{
/// LinkFactory is responsible for returning std::functions that create the
/// link layer types
struct LinkFactory
{
enum class LinkType
{
eLinkUTP,
eLinkIWP,
eLinkMempipe,
eLinkUnknown
};
using Factory = std::function<LinkLayer_ptr(
std::shared_ptr<KeyManager>,
GetRCFunc,
LinkMessageHandler,
SignBufferFunc,
SessionEstablishedHandler,
SessionRenegotiateHandler,
TimeoutHandler,
SessionClosedHandler,
PumpDoneHandler)>;
/// get link type by name string
/// if invalid returns eLinkUnspec
static LinkType
TypeFromName(std::string_view name);
/// turns a link type into a string representation
static std::string
NameFromType(LinkType t);
/// obtain a link factory of a certain type
static Factory
Obtain(LinkType t, bool permitInbound);
};
} // namespace llarp