X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/2db7e7236c61f8ee346800c82c800eafcd65de4e..114e097d3658e41e7946b5d5ba1ad2ffdc7fe2d9:/projects/rlm_stg/stg_client.h diff --git a/projects/rlm_stg/stg_client.h b/projects/rlm_stg/stg_client.h index 680d0883..b90b0e60 100644 --- a/projects/rlm_stg/stg_client.h +++ b/projects/rlm_stg/stg_client.h @@ -18,44 +18,71 @@ * Author : Maxim Mamontov */ -/* - * Header file for client part of data access via Stargazer for RADIUS - * - * $Revision: 1.4 $ - * $Date: 2010/04/16 12:30:02 $ - * - */ - #ifndef STG_CLIENT_H #define STG_CLIENT_H -#include +#include "stg/os_int.h" -#include -#include -#include // socklen_t +#include -#include "stg/blowfish.h" -#include "stg/rad_packets.h" +#include +#include +#include typedef std::vector > PAIRS; +struct RESULT +{ + PAIRS modify; + PAIRS reply; +}; + +struct ChannelConfig { + struct Error : std::runtime_error { + Error(const std::string& message) : runtime_error(message) {} + }; + + ChannelConfig(std::string address); + + std::string transport; + std::string key; + std::string address; + std::string portStr; + uint16_t port; +}; + class STG_CLIENT { public: - STG_CLIENT(const std::string & host, uint16_t port, const std::string & password); + enum TYPE { + AUTHORIZE, + AUTHENTICATE, + POST_AUTH, + PRE_ACCT, + ACCOUNT + }; + struct Error : std::runtime_error { + Error(const std::string& message) : runtime_error(message) {} + }; + + typedef bool (*Callback)(void* /*data*/, const RESULT& /*result*/, bool /*status*/); + + STG_CLIENT(const std::string& address, Callback callback, void* data); + STG_CLIENT(const STG_CLIENT& rhs); ~STG_CLIENT(); + bool stop(); + bool connected() const; + static STG_CLIENT* get(); - static void configure(const std::string& server, uint16_t port, const std::string& password); + static bool configure(const std::string& address, Callback callback, void* data); + static bool reconnect(); - PAIRS authorize(const PAIRS& pairs); - PAIRS authenticate(const PAIRS& pairs); - PAIRS postAuth(const PAIRS& pairs); - PAIRS preAcct(const PAIRS& pairs); - PAIRS account(const PAIRS& pairs); + bool request(TYPE type, const std::string& userName, const std::string& password, const PAIRS& pairs); private: + class Impl; + boost::scoped_ptr m_impl; }; #endif