]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/other/radius/server.h
Sending attributes from <auth>/send section. (#13)
[stg.git] / projects / stargazer / plugins / other / radius / server.h
1 #pragma once
2
3 #include "radproto/socket.h"
4 #include "radproto/packet.h"
5 #include "config.h"
6 #include "radproto/dictionaries.h"
7 #include "stg/logger.h"
8 #include <boost/asio.hpp>
9 #include <stop_token.hpp>
10 #include <optional>
11 #include <cstdint> //uint8_t, uint32_t
12
13 namespace STG
14 {
15     class Users;
16     class User;
17
18     class Server
19     {
20         public:
21             Server(boost::asio::io_context& io_context, const std::string& secret, uint16_t port, const std::string& filePath, std::stop_token token, PluginLogger& logger, Users* users, const Config& config);
22             void stop();
23         private:
24             std::vector<RadProto::Attribute*> makeAttributes(const User* user);
25             RadProto::Packet makeResponse(const RadProto::Packet& request);
26             const User* findUser(const RadProto::Packet& packet);
27             void handleReceive(const boost::system::error_code& error, const std::optional<RadProto::Packet>& packet, const boost::asio::ip::udp::endpoint& source);
28             void handleSend(const boost::system::error_code& ec);
29             void start();
30             void startReceive();
31
32             RadProto::Socket m_radius;
33             RadProto::Dictionaries m_dictionaries;
34             Users* m_users;
35             const Config& m_config;
36             std::stop_token m_token;
37
38             PluginLogger& m_logger;
39     };
40 }