X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/b05d53afe92ce0c90589e320bf8711539c0ea6c5..20072b367cf034ab9124560e4a06d8e32a388d93:/projects/rlm_stg/stg_client.h diff --git a/projects/rlm_stg/stg_client.h b/projects/rlm_stg/stg_client.h index f87f816f..d57af7da 100644 --- a/projects/rlm_stg/stg_client.h +++ b/projects/rlm_stg/stg_client.h @@ -18,63 +18,74 @@ * 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 "stg/sgcp_proto.h" // Proto +#include "stg/sgcp_types.h" // TransportType +#include "stg/os_int.h" + +#include + #include +#include +#include + +typedef std::vector > PAIRS; -#include -#include -#include // socklen_t +struct RESULT +{ + PAIRS modify; + PAIRS reply; +}; -#include "stg/blowfish.h" -#include "stg/rad_packets.h" +struct ChannelConfig { + struct Error : std::runtime_error { + Error(const std::string& message) : runtime_error(message) {} + }; + + ChannelConfig(std::string address); + + STG::SGCP::TransportType transport; + std::string key; + std::string address; + uint16_t port; +}; class STG_CLIENT { public: - STG_CLIENT(const std::string & host, uint16_t port, uint16_t lp, const std::string & pass); + enum TYPE { + AUTHORIZE, + AUTHENTICATE, + POST_AUTH, + PRE_ACCT, + ACCOUNT + }; + struct Error : std::runtime_error { + Error(const std::string& message) : runtime_error(message) {} + }; + + STG_CLIENT(const std::string& address); ~STG_CLIENT(); - std::string GetUserPassword() const; + bool stop(); - int Authorize(const std::string & login, const std::string & svc); - int Authenticate(const std::string & login, const std::string & svc); - int PostAuthenticate(const std::string & login, const std::string & svc); - int Account(const std::string & type, const std::string & login, const std::string & svc, const std::string & sessid); + static STG_CLIENT* get(); + static bool configure(const std::string& address); - uint32_t GetFramedIP() const; - - const std::string & GetError() const { return errorStr; }; + RESULT request(TYPE type, const std::string& userName, const std::string& password, const PAIRS& pairs); private: - uint16_t localPort; - std::string password; - int sock; - std::string errorStr; - - struct sockaddr_in outerAddr; - - std::string userPassword; - - uint32_t framedIP; - - BLOWFISH_CTX ctx; - - int PrepareNet(); + ChannelConfig m_config; + STG::SGCP::Proto m_proto; + boost::thread m_thread; - int Request(RAD_PACKET * packet, const std::string & login, const std::string & svc, uint8_t packetType); + void m_writeHeader(TYPE type, const std::string& userName, const std::string& password); + void m_writePairBlock(const PAIRS& source); + PAIRS m_readPairBlock(); - int RecvData(RAD_PACKET * packet); - int Send(const RAD_PACKET & packet); + void m_run(); }; #endif