Instrument Neutral Distributed Interface INDI  2.0.2
tcpsocket.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2022 by Pawel Soja <kernel32.pl@gmail.com>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Lesser General Public
6  License as published by the Free Software Foundation; either
7  version 2.1 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU Lesser General Public
15  License along with this library; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 #pragma once
19 
20 #include <string>
21 #include <memory>
22 #include <functional>
23 
24 #include "indimacros.h"
25 
26 class TcpSocketPrivate;
27 class TcpSocket
28 {
29  public:
31  {
52  SslInternalError, /* 20 */
55 
57  };
58 
60  {
68  };
69 
70  public:
71  TcpSocket();
72  virtual ~TcpSocket();
73 
74  public:
75  void setConnectionTimeout(int timeout);
76 
77  public:
78  void connectToHost(const std::string &hostName, uint16_t port);
79  void disconnectFromHost();
80 
81  public:
82  ssize_t write(const char *data, size_t size);
83  ssize_t write(const std::string &data);
84 
85  public:
86  SocketError error() const;
87  std::string errorString() const;
88 
89  public:
90  void onConnected(const std::function<void()> &callback);
91  void onDisconnected(const std::function<void()> &callback);
92  void onData(const std::function<void(const char *, size_t)> &callback);
93  void onErrorOccurred(const std::function<void(SocketError)> &callback);
94 
95  public:
96  bool waitForDisconnected(int timeout = 2000) const;
97  bool waitForConnected(int timeout = 2000) const;
98 
99  public:
100  int *socketDescriptor() const;
101 
102  protected:
103  virtual void connected();
104  virtual void disconnected();
105  virtual void readyRead();
106  virtual void errorOccurred(SocketError);
107 
108  protected:
109  void emitConnected() const;
110  void emitDisconnected() const;
111  void emitData(const char *data, size_t size) const;
112  void emitErrorOccurred(SocketError error) const;
113 
114  protected:
115  void setSocketError(SocketError socketError);
116 
117  protected:
118  friend class TcpSocketPrivate;
119  std::unique_ptr<TcpSocketPrivate> d_ptr;
120  TcpSocket(std::unique_ptr<TcpSocketPrivate> &&d);
121 };
std::unique_ptr< TcpSocketPrivate > d_ptr
Definition: tcpsocket.h:119
void onData(const std::function< void(const char *, size_t)> &callback)
Definition: tcpsocket.cpp:438
bool waitForDisconnected(int timeout=2000) const
Definition: tcpsocket.cpp:464
virtual void disconnected()
Definition: tcpsocket.cpp:490
std::string errorString() const
Definition: tcpsocket.cpp:423
@ ConnectedState
Definition: tcpsocket.h:64
@ ConnectingState
Definition: tcpsocket.h:63
@ ListeningState
Definition: tcpsocket.h:66
@ ClosingState
Definition: tcpsocket.h:67
@ HostLookupState
Definition: tcpsocket.h:62
@ BoundState
Definition: tcpsocket.h:65
@ UnconnectedState
Definition: tcpsocket.h:61
void emitConnected() const
Definition: tcpsocket.cpp:514
void setConnectionTimeout(int timeout)
Definition: tcpsocket.cpp:337
void connectToHost(const std::string &hostName, uint16_t port)
Definition: tcpsocket.cpp:342
virtual ~TcpSocket()
Definition: tcpsocket.cpp:328
@ ProxyNotFoundError
Definition: tcpsocket.h:49
@ SslHandshakeFailedError
Definition: tcpsocket.h:45
@ ProxyConnectionRefusedError
Definition: tcpsocket.h:46
@ TemporaryError
Definition: tcpsocket.h:54
@ ProxyConnectionClosedError
Definition: tcpsocket.h:47
@ SslInternalError
Definition: tcpsocket.h:52
@ RemoteHostClosedError
Definition: tcpsocket.h:33
@ UnfinishedSocketOperationError
Definition: tcpsocket.h:43
@ OperationError
Definition: tcpsocket.h:51
@ ConnectionRefusedError
Definition: tcpsocket.h:32
@ AddressInUseError
Definition: tcpsocket.h:40
@ SocketAddressNotAvailableError
Definition: tcpsocket.h:41
@ SslInvalidUserDataError
Definition: tcpsocket.h:53
@ SocketAccessError
Definition: tcpsocket.h:35
@ ProxyProtocolError
Definition: tcpsocket.h:50
@ NetworkError
Definition: tcpsocket.h:39
@ UnsupportedSocketOperationError
Definition: tcpsocket.h:42
@ ProxyAuthenticationRequiredError
Definition: tcpsocket.h:44
@ SocketTimeoutError
Definition: tcpsocket.h:37
@ ProxyConnectionTimeoutError
Definition: tcpsocket.h:48
@ SocketResourceError
Definition: tcpsocket.h:36
@ HostNotFoundError
Definition: tcpsocket.h:34
@ UnknownSocketError
Definition: tcpsocket.h:56
@ DatagramTooLargeError
Definition: tcpsocket.h:38
void emitErrorOccurred(SocketError error) const
Definition: tcpsocket.cpp:532
void emitDisconnected() const
Definition: tcpsocket.cpp:520
virtual void connected()
Definition: tcpsocket.cpp:485
SocketError error() const
Definition: tcpsocket.cpp:418
void emitData(const char *data, size_t size) const
Definition: tcpsocket.cpp:526
void setSocketError(SocketError socketError)
Definition: tcpsocket.cpp:538
int * socketDescriptor() const
Definition: tcpsocket.cpp:480
void onErrorOccurred(const std::function< void(SocketError)> &callback)
Definition: tcpsocket.cpp:443
void disconnectFromHost()
Definition: tcpsocket.cpp:347
ssize_t write(const char *data, size_t size)
Definition: tcpsocket.cpp:352
void onDisconnected(const std::function< void()> &callback)
Definition: tcpsocket.cpp:433
bool waitForConnected(int timeout=2000) const
Definition: tcpsocket.cpp:448
virtual void errorOccurred(SocketError)
Definition: tcpsocket.cpp:509
virtual void readyRead()
Definition: tcpsocket.cpp:495
void onConnected(const std::function< void()> &callback)
Definition: tcpsocket.cpp:428