]> git.vomp.tv Git - vompclient.git/blob - tcp.h
Windows fixes
[vompclient.git] / tcp.h
1 /*
2     Copyright 2020 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #ifndef TCP_H
21 #define TCP_H
22
23 #ifdef WIN32
24 #include <WinSock2.h> // for SOCKET
25 #endif
26
27 #include <mutex>
28
29 #include "defines.h"
30
31 struct MACAddress
32 {
33   UCHAR mac[6];
34 };
35
36 class Log;
37
38 class TCP
39 {
40   public:
41     ~TCP();
42     bool init(); // Must call this first, once on any new TCP object
43     void shutdown(); // Optional. Closes connection. Can call connect() next
44     void abortCall(); // causes a read/connect call to immediately abort
45
46     bool connect(const std::string& ip, USHORT port);
47     bool read(void* dest, ULONG numBytes);
48     bool write(void* src, ULONG numBytes);
49     bool status();
50
51     MACAddress getMAC();
52
53   private:
54     Log* logger;
55     int sockfd{-1};
56     bool connected{};
57     std::mutex writeMutex;
58
59 #ifdef WIN32
60     SOCKET abortSocket;
61 #else
62     int abortPipe[2]{-1, -1};
63 #endif
64 };
65
66 #endif