]> git.stg.codes - stg.git/blob - libs/srvconf/netunit.h
Merge remote-tracking branch 'github/master'
[stg.git] / libs / srvconf / netunit.h
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
19  */
20
21 #pragma once
22
23 #include <string>
24 #include <cstdint>
25
26 namespace STG
27 {
28
29 class NetTransact
30 {
31     public:
32         using Callback = bool (*)(const std::string&, bool, void *);
33
34         NetTransact(const std::string& server, uint16_t port,
35                     const std::string& login, const std::string& password);
36         NetTransact(const std::string& server, uint16_t port,
37                     const std::string& localAddress, uint16_t localPort,
38                     const std::string& login, const std::string& password);
39         ~NetTransact();
40
41         int Transact(const std::string& request, Callback f, void* data);
42         const std::string & GetError() const { return m_errorMsg; }
43
44         int  Connect();
45         void Disconnect();
46
47     private:
48         int  TxHeader();
49         int  RxHeaderAnswer();
50
51         int  TxLogin();
52         int  RxLoginAnswer();
53
54         int  TxLoginS();
55         int  RxLoginSAnswer();
56
57         int  TxData(const std::string& text);
58         int  RxDataAnswer(Callback f, void* data);
59
60         std::string m_server;
61         uint16_t  m_port;
62         std::string m_localAddress;
63         uint16_t m_localPort;
64         std::string m_login;
65         std::string m_password;
66         int m_sock;
67         std::string m_errorMsg;
68
69         static bool TxCrypto(const void * block, size_t size, void * data);
70         static bool RxCrypto(const void * block, size_t size, void * data);
71 };
72
73 } // namespace STG