Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ArchNetworkBSD.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
11#include "arch/IArchNetwork.h"
12
13#include <memory>
14#include <mutex>
15#include <poll.h>
16#include <sys/socket.h>
17
18#define ARCH_NETWORK ArchNetworkBSD
19#define TYPED_ADDR(type_, addr_) (reinterpret_cast<type_ *>(&addr_->m_addr))
20
21// old systems may use char* for [gs]etsockopt()'s optval argument.
22// this should be void on modern systems but char is forwards
23// compatible so we always use it.
24using optval_t = char;
25
27{
28public:
29 int m_fd;
31};
32
34{
35public:
37 {
38 // do nothing
39 }
40
41public:
42 struct sockaddr_storage m_addr;
43 socklen_t m_len;
44};
45
48{
49
50public:
51 struct Deps
52 {
53 virtual ~Deps() = default;
54 virtual void sleep(double);
55 virtual int poll(struct pollfd *, nfds_t, int);
56 virtual std::shared_ptr<struct pollfd[]> makePollFD(nfds_t);
57 virtual ssize_t read(int, void *, size_t);
58 virtual void testCancelThread();
59 };
60
61 explicit ArchNetworkBSD(std::shared_ptr<Deps> deps = std::make_shared<Deps>()) : m_pDeps(deps)
62 {
63 }
64 ArchNetworkBSD(ArchNetworkBSD const &) = delete;
66 ~ArchNetworkBSD() override = default;
67
70
71 void init() override;
72
73 // IArchNetwork overrides
76 void closeSocket(ArchSocket s) override;
77 void closeSocketForRead(ArchSocket s) override;
78 void closeSocketForWrite(ArchSocket s) override;
79 void bindSocket(ArchSocket s, ArchNetAddress addr) override;
80 void listenOnSocket(ArchSocket s) override;
83 int pollSocket(PollEntry[], int num, double timeout) override;
84 void unblockPollSocket(ArchThread thread) override;
85 size_t readSocket(ArchSocket s, void *buf, size_t len) override;
86 size_t writeSocket(ArchSocket s, const void *buf, size_t len) override;
87 void throwErrorOnSocket(ArchSocket) override;
88 bool setNoDelayOnSocket(ArchSocket, bool noDelay) override;
89 bool setReuseAddrOnSocket(ArchSocket, bool reuse) override;
90 std::string getHostName() override;
93 std::vector<ArchNetAddress> nameToAddr(const std::string &) override;
94 void closeAddr(ArchNetAddress) override;
95 std::string addrToName(ArchNetAddress) override;
96 std::string addrToString(ArchNetAddress) override;
98 void setAddrPort(ArchNetAddress, int port) override;
99 int getAddrPort(ArchNetAddress) override;
100 bool isAnyAddr(ArchNetAddress) override;
102
103private:
104 const int *getUnblockPipe();
105 const int *getUnblockPipeForThread(ArchThread);
106 void setBlockingOnSocket(int fd, bool blocking) const;
107 [[noreturn]] void throwError(int) const override;
108 [[noreturn]] void throwNameError(int) const override;
109
110 std::shared_ptr<Deps> m_pDeps;
111 std::mutex m_mutex;
112};
char optval_t
Definition ArchNetworkBSD.h:24
static void FAR int len
Definition ArchNetworkWinsock.cpp:37
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
static struct sockaddr FAR * addr
Definition ArchNetworkWinsock.cpp:24
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:39
static void FAR * buf
Definition ArchNetworkWinsock.cpp:37
ArchThreadImpl * ArchThread
Opaque thread type. An opaque type representing a thread.
Definition IArchMultithread.h:53
ArchNetAddressImpl * ArchNetAddress
Opaque network address type. An opaque type representing a network address.
Definition IArchNetwork.h:45
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
struct sockaddr_storage m_addr
Definition ArchNetworkBSD.h:42
ArchNetAddressImpl()
Definition ArchNetworkBSD.h:36
socklen_t m_len
Definition ArchNetworkBSD.h:43
ArchSocket newSocket(AddressFamily, SocketType) override
Create a new socket.
Definition ArchNetworkBSD.cpp:98
std::string getHostName() override
Return local host's name.
Definition ArchNetworkBSD.cpp:459
ArchNetworkBSD(ArchNetworkBSD &&)=delete
void closeSocket(ArchSocket s) override
Release a socket reference.
Definition ArchNetworkBSD.cpp:129
ArchNetworkBSD(std::shared_ptr< Deps > deps=std::make_shared< Deps >())
Definition ArchNetworkBSD.h:61
ArchNetAddress newAnyAddr(AddressFamily) override
Create an "any" network address.
Definition ArchNetworkBSD.cpp:470
~ArchNetworkBSD() override=default
ArchSocket acceptSocket(ArchSocket s, ArchNetAddress *addr) override
Accept connection on socket.
Definition ArchNetworkBSD.cpp:193
void closeSocketForRead(ArchSocket s) override
Close socket for further reads.
Definition ArchNetworkBSD.cpp:155
bool isEqualAddr(ArchNetAddress, ArchNetAddress) override
Test addresses for equality.
Definition ArchNetworkBSD.cpp:707
bool setReuseAddrOnSocket(ArchSocket, bool reuse) override
Turn address reuse on or off on socket.
Definition ArchNetworkBSD.cpp:439
ArchNetAddress copyAddr(ArchNetAddress) override
Copy a network address.
Definition ArchNetworkBSD.cpp:504
void unblockPollSocket(ArchThread thread) override
Unblock thread in pollSocket()
Definition ArchNetworkBSD.cpp:347
std::string addrToString(ArchNetAddress) override
Convert an address to a string.
Definition ArchNetworkBSD.cpp:584
std::string addrToName(ArchNetAddress) override
Convert an address to a host name.
Definition ArchNetworkBSD.cpp:563
std::vector< ArchNetAddress > nameToAddr(const std::string &) override
Convert a name to a network address.
Definition ArchNetworkBSD.cpp:512
ArchNetworkBSD & operator=(ArchNetworkBSD &&)=delete
ArchSocket copySocket(ArchSocket s) override
Copy a socket object.
Definition ArchNetworkBSD.cpp:119
ArchNetworkBSD(ArchNetworkBSD const &)=delete
void bindSocket(ArchSocket s, ArchNetAddress addr) override
Bind socket to address.
Definition ArchNetworkBSD.cpp:173
void throwErrorOnSocket(ArchSocket) override
Check error on socket.
Definition ArchNetworkBSD.cpp:384
void init() override
Definition ArchNetworkBSD.cpp:93
bool setNoDelayOnSocket(ArchSocket, bool noDelay) override
Turn Nagle algorithm on or off on socket.
Definition ArchNetworkBSD.cpp:419
AddressFamily getAddrFamily(ArchNetAddress) override
Get an address's family.
Definition ArchNetworkBSD.cpp:614
size_t writeSocket(ArchSocket s, const void *buf, size_t len) override
Write data from socket.
Definition ArchNetworkBSD.cpp:370
size_t readSocket(ArchSocket s, void *buf, size_t len) override
Read data from socket.
Definition ArchNetworkBSD.cpp:356
bool connectSocket(ArchSocket s, ArchNetAddress name) override
Connect socket.
Definition ArchNetworkBSD.cpp:244
int getAddrPort(ArchNetAddress) override
Get the port of an address.
Definition ArchNetworkBSD.cpp:656
void setAddrPort(ArchNetAddress, int port) override
Set the port of an address.
Definition ArchNetworkBSD.cpp:631
void listenOnSocket(ArchSocket s) override
Listen for connections on socket.
Definition ArchNetworkBSD.cpp:183
void closeSocketForWrite(ArchSocket s) override
Close socket for further writes.
Definition ArchNetworkBSD.cpp:164
int pollSocket(PollEntry[], int num, double timeout) override
Check socket state.
Definition ArchNetworkBSD.cpp:261
ArchNetworkBSD & operator=(ArchNetworkBSD const &)=delete
bool isAnyAddr(ArchNetAddress) override
Test for the "any" address.
Definition ArchNetworkBSD.cpp:679
void closeAddr(ArchNetAddress) override
Destroy a network address.
Definition ArchNetworkBSD.cpp:556
Internal socket data. An architecture dependent type holding the necessary data for a socket.
Definition ArchNetworkBSD.h:27
int m_fd
Definition ArchNetworkBSD.h:29
int m_refCount
Definition ArchNetworkBSD.h:30
A socket query for poll()
Definition IArchNetwork.h:85
Interface for architecture dependent networking.
Definition IArchNetwork.h:53
SocketType
Supported socket types.
Definition IArchNetwork.h:65
AddressFamily
Supported address families.
Definition IArchNetwork.h:57
Definition ArchNetworkBSD.h:52
virtual void sleep(double)
Definition ArchNetworkBSD.cpp:64
virtual ~Deps()=default
virtual void testCancelThread()
Definition ArchNetworkBSD.cpp:84
virtual ssize_t read(int, void *, size_t)
Definition ArchNetworkBSD.cpp:79
virtual std::shared_ptr< struct pollfd[]> makePollFD(nfds_t)
Definition ArchNetworkBSD.cpp:74
virtual int poll(struct pollfd *, nfds_t, int)
Definition ArchNetworkBSD.cpp:69