36 #ifndef _QORE_QORESOCKET_H 38 #define _QORE_QORESOCKET_H 41 #include <qore/InputStream.h> 42 #include <qore/OutputStream.h> 48 #include <sys/types.h> 51 #include <openssl/ssl.h> 52 #include <openssl/err.h> 54 #define QSE_MISC_ERR 0 55 #define QSE_RECV_ERR -1 56 #define QSE_NOT_OPEN -2 57 #define QSE_TIMEOUT -3 58 #define QSE_SSL_ERR -4 60 #define QSE_IN_OP_THREAD -6 74 friend hashdecl qore_socket_private;
77 hashdecl qore_socketsource_private *priv;
83 DLLLOCAL SocketSource& operator=(
const SocketSource&);
127 friend hashdecl qore_socket_private;
128 friend hashdecl qore_httpclient_priv;
129 friend class QoreSocketObject;
134 hashdecl qore_socket_private *priv;
139 DLLLOCAL
static void convertHeaderToHash(
QoreHashNode* h,
char* p);
142 DLLLOCAL QoreSocket(
const QoreSocket&);
145 DLLLOCAL QoreSocket& operator=(
const QoreSocket&);
149 DLLEXPORT QoreSocket();
152 DLLEXPORT ~QoreSocket();
166 DLLEXPORT
int connect(
const char* name,
ExceptionSink* xsink = 0);
181 DLLEXPORT
int connect(
const char* name,
int timeout_ms,
ExceptionSink* xsink = 0);
194 DLLEXPORT
int connectINET(
const char* host,
int prt,
ExceptionSink* xsink = 0);
211 DLLEXPORT
int connectINET2(
const char* name,
const char* service,
int family =
Q_AF_UNSPEC,
int sock_type =
Q_SOCK_STREAM,
int protocol = 0,
int timeout_ms = -1,
ExceptionSink* xsink = 0);
225 DLLEXPORT
int connectINET(
const char* host,
int prt,
int timeout_ms,
ExceptionSink* xsink = 0);
237 DLLEXPORT
int connectUNIX(
const char* p,
ExceptionSink* xsink = 0);
251 DLLEXPORT
int connectUNIX(
const char* p,
int socktype,
int protocol = 0,
ExceptionSink* xsink = 0);
269 DLLEXPORT
int connectSSL(
const char* name, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
288 DLLEXPORT
int connectSSL(
const char* name,
int timeout_ms, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
305 DLLEXPORT
int connectINETSSL(
const char* host,
int prt, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
323 DLLEXPORT
int connectINETSSL(
const char* host,
int prt,
int timeout_ms, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
342 DLLEXPORT
int connectINET2SSL(
const char* name,
const char* service,
int family,
int sock_type,
int protocol,
int timeout_ms, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink = 0);
358 DLLEXPORT
int connectUNIXSSL(
const char* p, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
376 DLLEXPORT
int connectUNIXSSL(
const char* p,
int socktype,
int protocol, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
385 DLLEXPORT
int bind(
const char* name,
bool reuseaddr =
false);
393 DLLEXPORT
int bind(
int prt,
bool reuseaddr);
402 DLLEXPORT
int bind(
const char* iface,
int prt,
bool reuseaddr =
false);
412 DLLEXPORT
int bind(
const struct sockaddr *addr,
int addr_size);
423 DLLEXPORT
int bind(
int family,
const struct sockaddr *addr,
int addr_size,
int socktype =
Q_SOCK_STREAM,
int protocol = 0);
434 DLLEXPORT
int bindUNIX(
const char* name,
ExceptionSink* xsink = 0);
447 DLLEXPORT
int bindUNIX(
const char* name,
int socktype,
int protocol = 0,
ExceptionSink* xsink = 0);
462 DLLEXPORT
int bindINET(
const char* name,
const char* service,
bool reuseaddr =
true,
int family =
Q_AF_UNSPEC,
int socktype =
Q_SOCK_STREAM,
int protocol = 0,
ExceptionSink* xsink = 0);
465 DLLEXPORT
int getPort();
527 DLLEXPORT QoreSocket* accept(
int timeout_ms,
ExceptionSink* xsink);
542 DLLEXPORT QoreSocket* acceptSSL(
int timeout_ms, X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
556 DLLEXPORT
int acceptAndReplace(
int timeout_ms,
ExceptionSink* xsink);
562 DLLEXPORT
int listen();
571 DLLEXPORT
int listen(
int backlog);
580 DLLEXPORT
int send(
const char* buf,
qore_size_t size);
676 DLLEXPORT
int sendi1(
char i);
684 DLLEXPORT
int sendi2(
short i);
692 DLLEXPORT
int sendi4(
int i);
700 DLLEXPORT
int sendi8(
int64 i);
709 DLLEXPORT
int sendi2LSB(
short i);
718 DLLEXPORT
int sendi4LSB(
int i);
727 DLLEXPORT
int sendi8LSB(
int64 i);
738 DLLEXPORT
int sendi1(
char i,
int timeout_ms,
ExceptionSink* xsink);
750 DLLEXPORT
int sendi2(
short i,
int timeout_ms,
ExceptionSink* xsink);
762 DLLEXPORT
int sendi4(
int i,
int timeout_ms,
ExceptionSink* xsink);
787 DLLEXPORT
int sendi2LSB(
short i,
int timeout_ms,
ExceptionSink* xsink);
800 DLLEXPORT
int sendi4LSB(
int i,
int timeout_ms,
ExceptionSink* xsink);
825 DLLEXPORT
int recvi1(
int timeout_ms,
char* val);
836 DLLEXPORT
int recvi2(
int timeout_ms,
short *val);
847 DLLEXPORT
int recvi4(
int timeout_ms,
int* val);
858 DLLEXPORT
int recvi8(
int timeout_ms,
int64 *val);
870 DLLEXPORT
int recvi2LSB(
int timeout_ms,
short *val);
882 DLLEXPORT
int recvi4LSB(
int timeout_ms,
int* val);
892 DLLEXPORT
int recvi8LSB(
int timeout_ms,
int64 *val);
901 DLLEXPORT
int recvu1(
int timeout_ms,
unsigned char* val);
912 DLLEXPORT
int recvu2(
int timeout_ms,
unsigned short *val);
923 DLLEXPORT
int recvu4(
int timeout_ms,
unsigned int* val);
935 DLLEXPORT
int recvu2LSB(
int timeout_ms,
unsigned short *val);
947 DLLEXPORT
int recvu4LSB(
int timeout_ms,
unsigned int* val);
1107 DLLEXPORT
int64 recvu2LSB(
int timeout_ms,
unsigned short *val,
ExceptionSink* xsink);
1197 DLLEXPORT
BinaryNode* recvBinary(
int timeout_ms,
int* prc);
1221 DLLEXPORT
int recv(
int fd,
qore_offset_t size,
int timeout_ms);
1250 DLLEXPORT
int sendHTTPMessage(
const char* method,
const char* path,
const char* http_version,
const QoreHashNode* headers,
const void* data,
qore_size_t size,
int source = QORE_SOURCE_SOCKET);
1264 DLLEXPORT
int sendHTTPMessage(
QoreHashNode* info,
const char* method,
const char* path,
const char* http_version,
const QoreHashNode* headers,
const void* data,
qore_size_t size,
int source = QORE_SOURCE_SOCKET);
1331 DLLEXPORT
int sendHTTPResponse(
int code,
const char* desc,
const char* http_version,
const QoreHashNode* headers,
const void* data,
qore_size_t size,
int source = QORE_SOURCE_SOCKET);
1347 DLLEXPORT
int sendHTTPResponse(
ExceptionSink* xsink,
int code,
const char* desc,
const char* http_version,
const QoreHashNode* headers,
const void* data,
qore_size_t size,
int source = QORE_SOURCE_SOCKET);
1364 DLLEXPORT
int sendHTTPResponse(
ExceptionSink* xsink,
int code,
const char* desc,
const char* http_version,
const QoreHashNode* headers,
const void* data,
qore_size_t size,
int source,
int timeout_ms);
1390 DLLEXPORT
AbstractQoreNode* readHTTPHeader(
int timeout_ms,
int* prc,
int source = QORE_SOURCE_SOCKET);
1440 DLLEXPORT
QoreHashNode* readHTTPChunkedBodyBinary(
int timeout_ms,
ExceptionSink* xsink,
int source = QORE_SOURCE_SOCKET);
1457 DLLEXPORT
int setSendTimeout(
int ms);
1460 DLLEXPORT
int setRecvTimeout(
int ms);
1463 DLLEXPORT
int getSendTimeout()
const;
1466 DLLEXPORT
int getRecvTimeout()
const;
1480 DLLEXPORT
bool isDataAvailable(
int timeout_ms = 0)
const;
1497 DLLEXPORT
bool isDataAvailable(
ExceptionSink* xsink,
int timeout_ms = 0)
const;
1512 DLLEXPORT
int asyncIoWait(
int timeout_ms,
bool read,
bool write)
const;
1519 DLLEXPORT
int close();
1528 DLLEXPORT
int shutdown();
1540 DLLEXPORT
int getSocket()
const;
1555 DLLEXPORT
bool isOpen()
const;
1560 DLLEXPORT
const char* getSSLCipherName()
const;
1565 DLLEXPORT
const char* getSSLCipherVersion()
const;
1570 DLLEXPORT
bool isSecure()
const;
1573 DLLEXPORT
long verifyPeerCertificate()
const;
1584 DLLEXPORT
int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
1596 DLLEXPORT
int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey,
int timeout_ms,
ExceptionSink* xsink);
1608 DLLEXPORT
int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey,
int timeout_ms,
ExceptionSink* xsink);
1619 DLLEXPORT
int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey,
ExceptionSink* xsink);
1631 DLLEXPORT
bool isWriteFinished(
int timeout_ms = 0)
const;
1643 DLLEXPORT
bool isWriteFinished(
ExceptionSink* xsink,
int timeout_ms = 0)
const;
1709 DLLEXPORT
void clearStats();
1715 DLLEXPORT
bool pendingHttpChunkedBody()
const;
1724 DLLEXPORT
void setSslVerifyMode(
int mode);
1731 DLLEXPORT
int getSslVerifyMode()
const;
1738 DLLEXPORT
void acceptAllCertificates(
bool accept_all =
true);
1745 DLLEXPORT
bool getAcceptAllCertificates()
const;
1756 DLLEXPORT
bool captureRemoteCertificates(
bool set);
1765 DLLEXPORT
QoreObject* getRemoteCertificate()
const;
1772 DLLEXPORT
int64 getConnectionId()
const;
1774 DLLLOCAL
static void doException(
int rc,
const char* meth,
int timeout_ms,
ExceptionSink* xsink);
1777 DLLLOCAL
void setEventQueue(Queue* cbq,
ExceptionSink* xsink);
1780 DLLLOCAL Queue* getQueue();
1783 DLLLOCAL
int64 getObjectIDForEvents()
const;
1785 DLLLOCAL
int setNoDelay(
int nodelay);
1786 DLLLOCAL
int getNoDelay()
const;
1792 class QoreSocketTimeoutHelper {
1794 class PrivateQoreSocketTimeoutHelper* priv;
1796 DLLEXPORT QoreSocketTimeoutHelper(
QoreSocket& s,
const char* op);
1797 DLLEXPORT ~QoreSocketTimeoutHelper();
1800 class QoreSocketThroughputHelper {
1802 class PrivateQoreSocketThroughputHelper* priv;
1804 DLLEXPORT QoreSocketThroughputHelper(
QoreSocket& s,
bool snd);
1805 DLLEXPORT ~QoreSocketThroughputHelper();
1806 DLLEXPORT
void finalize(
int64 bytes);
1809 #endif // _QORE_QORESOCKET_H #define Q_SOCK_STREAM
platform-independent define for SOCK_STREAM
Definition: common.h:67
DLLEXPORT SocketSource()
creates an empty object
defines string encoding functions in Qore
Definition: QoreEncoding.h:83
a helper class for getting socket origination information
Definition: QoreSocket.h:73
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:73
provides thread-safe access to FTP servers through Qore data structures
Definition: QoreFtpClient.h:71
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:81
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
DLLEXPORT const char * getAddress() const
returns the host address string as a C string
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
DLLEXPORT ~SocketSource()
destroys the object and frees all memory
DLLEXPORT QoreStringNode * takeHostName()
returns the hostname string field and leaves the object's hostname field empty; the caller owns the Q...
provides access to sockets using Qore data structures
Definition: QoreSocket.h:126
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:61
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:76
base class for resolved call references
Definition: CallReferenceNode.h:105
DLLEXPORT QoreStringNode * takeAddress()
returns the host address string field and leaves the object's host address field empty; the caller ow...
#define Q_AF_UNSPEC
cross-platform define for AF_UNSPEC
Definition: common.h:58
holds arbitrary binary data
Definition: BinaryNode.h:41
DLLEXPORT const char * getHostName() const
returns the hostname string as a C string