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

---

# llarp/service/context.hpp



## Namespaces

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

## Classes

|                | Name           |
| -------------- | -------------- |
| struct | **[llarp::service::Context](Classes/structllarp_1_1service_1_1Context.md)** <br>holds all the hidden service endpoints we own this should be refactored (removed entirely...?) now that lokinet only supports one endpoint per instance  |




## Source code

```cpp
#pragma once

#include <llarp/handlers/tun.hpp>
#include <llarp/net/net.hpp>
#include <llarp/config/config.hpp>
#include "endpoint.hpp"

#include <unordered_map>

namespace llarp
{
  namespace service
  {
    struct Context
    {
      explicit Context(AbstractRouter* r);
      ~Context();

      void
      Tick(llarp_time_t now);

      bool
      StopAll();

      util::StatusObject
      ExtractStatus() const;

      bool
      hasEndpoints();

      void
      ForEachService(std::function<bool(const std::string&, const Endpoint_ptr&)> visit) const;

      void
      Pump();

      void
      AddEndpoint(const Config& conf, bool autostart = false);

      void
      InjectEndpoint(std::string name, std::shared_ptr<Endpoint> ep);

      bool
      RemoveEndpoint(const std::string& name);

      Endpoint_ptr
      GetEndpointByName(const std::string& name) const;

      Endpoint_ptr
      GetDefault() const
      {
        return GetEndpointByName("default");
      }

      bool
      StartAll();

     private:
      AbstractRouter* const m_Router;
      std::unordered_map<std::string, std::shared_ptr<Endpoint>> m_Endpoints;
      std::list<std::shared_ptr<Endpoint>> m_Stopped;
    };
  }  // namespace service
}  // namespace llarp
```


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

Updated on 2023-01-09 at 18:23:49 +0000
