---
title: llarp/service/handler.hpp

---

# llarp/service/handler.hpp



## Namespaces

| Name           |
| -------------- |
| **[llarp](Namespaces/namespacellarp.md)** <br>[crypto.hpp] |
| **[llarp::service](Namespaces/namespacellarp_1_1service.md)**  |

## Classes

|                | Name           |
| -------------- | -------------- |
| struct | **[llarp::service::RecvDataEvent](Classes/structllarp_1_1service_1_1RecvDataEvent.md)**  |
| struct | **[llarp::service::IDataHandler](Classes/structllarp_1_1service_1_1IDataHandler.md)**  |




## Source code

```cpp
#pragma once

#include <llarp/crypto/types.hpp>
#include <llarp/path/path.hpp>
#include "intro_set.hpp"
#include "convotag.hpp"

#include <memory>
#include <set>

namespace llarp
{
  namespace service
  {
    struct ProtocolMessage;

    struct RecvDataEvent
    {
      path::Path_ptr fromPath;
      PathID_t pathid;
      std::shared_ptr<ProtocolMessage> msg;
    };

    struct ProtocolMessage;
    struct IDataHandler
    {
      virtual bool
      HandleDataMessage(
          path::Path_ptr path, const PathID_t from, std::shared_ptr<ProtocolMessage> msg) = 0;

      virtual bool
      GetCachedSessionKeyFor(const ConvoTag& remote, SharedSecret& secret) const = 0;
      virtual void
      PutCachedSessionKeyFor(const ConvoTag& remote, const SharedSecret& secret) = 0;

      virtual void
      ConvoTagTX(const ConvoTag& tag) = 0;

      virtual void
      ConvoTagRX(const ConvoTag& tag) = 0;

      virtual void
      RemoveConvoTag(const ConvoTag& remote) = 0;

      virtual bool
      HasConvoTag(const ConvoTag& remote) const = 0;

      virtual void
      PutSenderFor(const ConvoTag& remote, const ServiceInfo& si, bool inbound) = 0;

      virtual bool
      GetSenderFor(const ConvoTag& remote, ServiceInfo& si) const = 0;

      virtual void
      PutIntroFor(const ConvoTag& remote, const Introduction& intro) = 0;

      virtual bool
      GetIntroFor(const ConvoTag& remote, Introduction& intro) const = 0;

      virtual void
      PutReplyIntroFor(const ConvoTag& remote, const Introduction& intro) = 0;

      virtual bool
      GetReplyIntroFor(const ConvoTag& remote, Introduction& intro) const = 0;

      virtual bool
      GetConvoTagsForService(const Address& si, std::set<ConvoTag>& tag) const = 0;

      virtual bool
      HasInboundConvo(const Address& addr) const = 0;

      virtual bool
      HasOutboundConvo(const Address& addr) const = 0;

      virtual bool
      WantsOutboundSession(const Address& addr) const = 0;
      virtual void
      QueueRecvData(RecvDataEvent ev) = 0;
    };
  }  // namespace service
}  // namespace llarp
```


-------------------------------

Updated on 2023-01-09 at 16:43:38 +0000
