1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
/*******************************************************************************
* Goggles Audio Player Library *
********************************************************************************
* Copyright (C) 2010-2021 by Sander Jansen. All Rights Reserved *
* --- *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see http://www.gnu.org/licenses. *
********************************************************************************/
#ifndef AP_SOCKET_H
#define AP_SOCKET_H
#include "ap_signal.h"
struct sockaddr;
#if defined(HAVE_OPENSSL)
typedef struct ssl_st SSL;
#elif defined(HAVE_GNUTLS)
struct gnutls_session_int;
typedef struct gnutls_session_int *gnutls_session_t;
#endif
namespace ap {
class Socket : public FXIODevice {
#ifdef _WIN32
FXuint sockethandle = 0;
#endif
protected:
FXint endofstream = 0;
private:
Socket(const Socket&);
Socket &operator=(const Socket&);
public:
Socket(){}
protected:
// Wait for specificied event
virtual WaitEvent wait(WaitMode);
public:
// Set Receive Timeout
FXbool setReceiveTimeout(FXTime);
// Set Send Timeout
FXbool setSendTimeout(FXTime);
// Get Pending Error
FXint getError() const;
public:
#ifdef _WIN32
FXbool isOpen() const;
#endif
// Handle eof
FXint eof() override;
// Close Socket
FXbool close() override;
virtual FXbool shutdown();
// Read block of bytes, returning number of bytes read
FXival readBlock(void* data,FXival count) override;
// Write block of bytes, returning number of bytes written
FXival writeBlock(const void* data,FXival count) override;
// Create specific socket type
virtual FXbool create(FXint domain,FXint type,FXint protocol,FXuint mode);
// Connect to address
virtual FXint connect(const struct sockaddr *,FXint sockaddr_length);
};
#if defined(HAVE_OPENSSL) || defined(HAVE_GNUTLS)
class SecureSocket : public Socket {
protected:
#if defined(HAVE_OPENSSL)
SSL* ssl = nullptr;
#elif defined(HAVE_GNUTLS)
gnutls_session_t session = nullptr;
protected:
FXint handshake();
#endif
public:
SecureSocket();
FXbool shutdown() override;
// Close SecureSocket
FXbool close() override;
// Read block of bytes, returning number of bytes read
FXival readBlock(void* data,FXival count) override;
// Write block of bytes, returning number of bytes written
FXival writeBlock(const void* data,FXival count) override;
// Create specific socket type
FXbool create(FXint domain,FXint type,FXint protocol,FXuint mode) override;
// Connect to address
FXint connect(const struct sockaddr *,FXint sockaddr_length) override;
};
#endif
struct IOContext;
class ThreadSocket : public Socket {
private:
IOContext * context = nullptr;
private:
ThreadSocket(const ThreadSocket&);
ThreadSocket &operator=(const ThreadSocket&);
protected:
// Wait for specified event
WaitEvent wait(WaitMode) override;
public:
ThreadSocket(IOContext*);
};
#if defined(HAVE_OPENSSL) || defined(HAVE_GNUTLS)
class ThreadSecureSocket : public SecureSocket {
private:
IOContext * context = nullptr;
private:
ThreadSecureSocket(const ThreadSecureSocket&);
ThreadSecureSocket &operator=(const ThreadSecureSocket&);
protected:
// Wait for specified event
WaitEvent wait(WaitMode) override;
public:
ThreadSecureSocket(IOContext*);
};
#endif
}
#endif
|