Qore Programming Language - C/C++ Library  0.8.13.8
QoreSocket.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreSocket.h
4 
5  IPv4, IPv6, unix socket class with SSL support
6 
7  Qore Programming Language
8 
9  Copyright (C) 2003 - 2017 Qore Technologies, s.r.o.
10 
11  will unlink (delete) UNIX domain socket files when closed
12 
13  Permission is hereby granted, free of charge, to any person obtaining a
14  copy of this software and associated documentation files (the "Software"),
15  to deal in the Software without restriction, including without limitation
16  the rights to use, copy, modify, merge, publish, distribute, sublicense,
17  and/or sell copies of the Software, and to permit persons to whom the
18  Software is furnished to do so, subject to the following conditions:
19 
20  The above copyright notice and this permission notice shall be included in
21  all copies or substantial portions of the Software.
22 
23  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29  DEALINGS IN THE SOFTWARE.
30 
31  Note that the Qore library is released under a choice of three open-source
32  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
33  information.
34 */
35 
36 #ifndef _QORE_QORESOCKET_H
37 
38 #define _QORE_QORESOCKET_H
39 
40 #include <qore/Qore.h>
41 #include <qore/InputStream.h>
42 #include <qore/OutputStream.h>
43 
44 #include <sys/types.h>
45 #include <unistd.h>
46 #include <strings.h>
47 #include <string.h>
48 #include <stdlib.h>
49 #include <ctype.h>
50 #include <unistd.h>
51 
52 #include <openssl/ssl.h>
53 #include <openssl/err.h>
54 
55 #define QSE_MISC_ERR 0
56 #define QSE_RECV_ERR -1
57 #define QSE_NOT_OPEN -2
58 #define QSE_TIMEOUT -3
59 #define QSE_SSL_ERR -4
60 #define QSE_IN_OP -5
61 #define QSE_IN_OP_THREAD -6
62 
63 class Queue;
64 
66 
73 class SocketSource {
74  friend struct qore_socket_private;
75 
76 private:
77  struct qore_socketsource_private *priv; // private implementation
78 
80  DLLLOCAL SocketSource(const SocketSource&);
81 
83  DLLLOCAL SocketSource& operator=(const SocketSource&);
84 
85 public:
87  DLLEXPORT SocketSource();
88 
90  DLLEXPORT ~SocketSource();
91 
93 
95  DLLEXPORT QoreStringNode* takeAddress();
96 
98 
100  DLLEXPORT QoreStringNode* takeHostName();
101 
103 
105  DLLEXPORT const char* getAddress() const;
106 
108 
110  DLLEXPORT const char* getHostName() const;
111 
112  DLLLOCAL void setAll(QoreObject* o, ExceptionSink* xsink);
113 };
114 
116 
126 class QoreSocket {
127  friend struct qore_socket_private;
128  friend struct qore_httpclient_priv;
129  friend class QoreSocketObject;
130  friend class QoreFtpClient;
131 
132 private:
134  struct qore_socket_private *priv;
135 
137  DLLLOCAL QoreSocket(int n_sock, int n_sfamily, int n_stype, int s_prot, const QoreEncoding *csid);
138 
139  DLLLOCAL static void convertHeaderToHash(QoreHashNode* h, char* p);
140 
142  DLLLOCAL QoreSocket(const QoreSocket&);
143 
145  DLLLOCAL QoreSocket& operator=(const QoreSocket&);
146 
147 public:
149  DLLEXPORT QoreSocket();
150 
152  DLLEXPORT ~QoreSocket();
153 
155 
166  DLLEXPORT int connect(const char* name, ExceptionSink* xsink = 0);
167 
169 
181  DLLEXPORT int connect(const char* name, int timeout_ms, ExceptionSink* xsink = 0);
182 
184 
194  DLLEXPORT int connectINET(const char* host, int prt, ExceptionSink* xsink = 0);
195 
197 
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);
212 
214 
225  DLLEXPORT int connectINET(const char* host, int prt, int timeout_ms, ExceptionSink* xsink = 0);
226 
228 
237  DLLEXPORT int connectUNIX(const char* p, ExceptionSink* xsink = 0);
238 
240 
251  DLLEXPORT int connectUNIX(const char* p, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
252 
254 
269  DLLEXPORT int connectSSL(const char* name, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
270 
272 
288  DLLEXPORT int connectSSL(const char* name, int timeout_ms, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
289 
291 
305  DLLEXPORT int connectINETSSL(const char* host, int prt, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
306 
308 
323  DLLEXPORT int connectINETSSL(const char* host, int prt, int timeout_ms, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
324 
326 
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);
343 
345 
358  DLLEXPORT int connectUNIXSSL(const char* p, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
359 
361 
376  DLLEXPORT int connectUNIXSSL(const char* p, int socktype, int protocol, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
377 
379 
385  DLLEXPORT int bind(const char* name, bool reuseaddr = false);
386 
388 
393  DLLEXPORT int bind(int prt, bool reuseaddr);
394 
396 
402  DLLEXPORT int bind(const char* iface, int prt, bool reuseaddr = false);
403 
405 
412  DLLEXPORT int bind(const struct sockaddr *addr, int addr_size);
413 
415 
423  DLLEXPORT int bind(int family, const struct sockaddr *addr, int addr_size, int socktype = Q_SOCK_STREAM, int protocol = 0);
424 
426 
434  DLLEXPORT int bindUNIX(const char* name, ExceptionSink* xsink = 0);
435 
437 
447  DLLEXPORT int bindUNIX(const char* name, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
448 
450 
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);
463 
465  DLLEXPORT int getPort();
466 
468 
480  DLLEXPORT QoreSocket* accept(SocketSource* source, ExceptionSink* xsink);
481 
483 
498  DLLEXPORT QoreSocket* acceptSSL(SocketSource* source, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
499 
501 
513  DLLEXPORT int acceptAndReplace(SocketSource* source);
514 
516 
527  DLLEXPORT QoreSocket* accept(int timeout_ms, ExceptionSink* xsink);
528 
530 
542  DLLEXPORT QoreSocket* acceptSSL(int timeout_ms, X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
543 
545 
556  DLLEXPORT int acceptAndReplace(int timeout_ms, ExceptionSink* xsink);
557 
559 
562  DLLEXPORT int listen();
563 
565 
571  DLLEXPORT int listen(int backlog);
572 
574 
580  DLLEXPORT int send(const char* buf, qore_size_t size);
581 
583 
590  DLLEXPORT int send(const char* buf, qore_size_t size, ExceptionSink* xsink);
591 
593 
601  DLLEXPORT int send(const char* buf, qore_size_t size, int timeout_ms, ExceptionSink* xsink);
602 
604 
610  DLLEXPORT int send(const QoreString *msg, ExceptionSink* xsink);
611 
613 
620  DLLEXPORT int send(const QoreString *msg, int timeout_ms, ExceptionSink* xsink);
621 
623 
628  DLLEXPORT int send(const BinaryNode* msg);
629 
631 
637  DLLEXPORT int send(const BinaryNode* msg, ExceptionSink* xsink);
638 
640 
647  DLLEXPORT int send(const BinaryNode* msg, int timeout_ms, ExceptionSink* xsink);
648 
650 
656  DLLEXPORT int send(int fd, qore_offset_t size = -1);
657 
659 
669  DLLEXPORT int send(int fd, qore_offset_t size, int timeout_ms, ExceptionSink* xsink);
670 
672 
676  DLLEXPORT int sendi1(char i);
677 
679 
684  DLLEXPORT int sendi2(short i);
685 
687 
692  DLLEXPORT int sendi4(int i);
693 
695 
700  DLLEXPORT int sendi8(int64 i);
701 
703 
709  DLLEXPORT int sendi2LSB(short i);
710 
712 
718  DLLEXPORT int sendi4LSB(int i);
719 
721 
727  DLLEXPORT int sendi8LSB(int64 i);
728 
730 
738  DLLEXPORT int sendi1(char i, int timeout_ms, ExceptionSink* xsink);
739 
741 
750  DLLEXPORT int sendi2(short i, int timeout_ms, ExceptionSink* xsink);
751 
753 
762  DLLEXPORT int sendi4(int i, int timeout_ms, ExceptionSink* xsink);
763 
765 
774  DLLEXPORT int sendi8(int64 i, int timeout_ms, ExceptionSink* xsink);
775 
777 
787  DLLEXPORT int sendi2LSB(short i, int timeout_ms, ExceptionSink* xsink);
788 
790 
800  DLLEXPORT int sendi4LSB(int i, int timeout_ms, ExceptionSink* xsink);
801 
803 
813  DLLEXPORT int sendi8LSB(int64 i, int timeout_ms, ExceptionSink* xsink);
814 
816 
825  DLLEXPORT int recvi1(int timeout_ms, char* val);
826 
828 
836  DLLEXPORT int recvi2(int timeout_ms, short *val);
837 
839 
847  DLLEXPORT int recvi4(int timeout_ms, int* val);
848 
850 
858  DLLEXPORT int recvi8(int timeout_ms, int64 *val);
859 
861 
870  DLLEXPORT int recvi2LSB(int timeout_ms, short *val);
871 
873 
882  DLLEXPORT int recvi4LSB(int timeout_ms, int* val);
883 
885 
892  DLLEXPORT int recvi8LSB(int timeout_ms, int64 *val);
893 
895 
901  DLLEXPORT int recvu1(int timeout_ms, unsigned char* val);
902 
904 
912  DLLEXPORT int recvu2(int timeout_ms, unsigned short *val);
913 
915 
923  DLLEXPORT int recvu4(int timeout_ms, unsigned int* val);
924 
926 
935  DLLEXPORT int recvu2LSB(int timeout_ms, unsigned short *val);
936 
938 
947  DLLEXPORT int recvu4LSB(int timeout_ms, unsigned int* val);
948 
950 
960  DLLEXPORT int64 recvi1(int timeout_ms, char* val, ExceptionSink* xsink);
961 
963 
974  DLLEXPORT int64 recvi2(int timeout_ms, short *val, ExceptionSink* xsink);
975 
977 
989  DLLEXPORT int64 recvi4(int timeout_ms, int* val, ExceptionSink* xsink);
990 
992 
1003  DLLEXPORT int64 recvi8(int timeout_ms, int64 *val, ExceptionSink* xsink);
1004 
1006 
1018  DLLEXPORT int64 recvi2LSB(int timeout_ms, short *val, ExceptionSink* xsink);
1019 
1021 
1033  DLLEXPORT int64 recvi4LSB(int timeout_ms, int* val, ExceptionSink* xsink);
1034 
1036 
1047  DLLEXPORT int64 recvi8LSB(int timeout_ms, int64 *val, ExceptionSink* xsink);
1048 
1050 
1060  DLLEXPORT int64 recvu1(int timeout_ms, unsigned char* val, ExceptionSink* xsink);
1061 
1063 
1075  DLLEXPORT int64 recvu2(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1076 
1078 
1090  DLLEXPORT int64 recvu4(int timeout_ms, unsigned int* val, ExceptionSink* xsink);
1091 
1093 
1107  DLLEXPORT int64 recvu2LSB(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1108 
1110 
1124  DLLEXPORT int64 recvu4LSB(int timeout_ms, unsigned int* val, ExceptionSink* xsink);
1125 
1127 
1134  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, int* prc);
1135 
1137 
1144  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1145 
1147 
1153  DLLEXPORT BinaryNode* recvBinary(qore_offset_t bufsize, int timeout_ms, int* prc);
1154 
1156 
1162  DLLEXPORT BinaryNode* recvBinary(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1163 
1165 
1174  DLLEXPORT QoreStringNode* recv(int timeout_ms, int* prc);
1175 
1177 
1186  DLLEXPORT QoreStringNode* recv(int timeout_ms, ExceptionSink* xsink);
1187 
1189 
1197  DLLEXPORT BinaryNode* recvBinary(int timeout_ms, int* prc);
1198 
1200 
1208  DLLEXPORT BinaryNode* recvBinary(int timeout_ms, ExceptionSink* xsink);
1209 
1211 
1221  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms);
1222 
1224 
1236  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms, ExceptionSink* xsink);
1237 
1239 
1249  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);
1250 
1252 
1263  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);
1264 
1266 
1280  DLLEXPORT int sendHTTPMessage(ExceptionSink* xsink, 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);
1281 
1283 
1298  DLLEXPORT int sendHTTPMessage(ExceptionSink* xsink, QoreHashNode* info, const char* method, const char* path, const char* http_version, const QoreHashNode* headers, const void* data, qore_size_t size, int source, int timeout_ms);
1299 
1301 
1315  DLLEXPORT int sendHTTPMessageWithCallback(ExceptionSink* xsink, QoreHashNode* info, const char* method, const char* path, const char* http_version, const QoreHashNode* headers, const ResolvedCallReferenceNode& send_callback, int source, int timeout_ms);
1316 
1318 
1330  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);
1331 
1333 
1346  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);
1347 
1349 
1363  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);
1364 
1366 
1379  DLLEXPORT int sendHTTPResponseWithCallback(ExceptionSink* xsink, int code, const char* desc, const char* http_version, const QoreHashNode* headers, const ResolvedCallReferenceNode& send_callback, int source, int timeout_ms);
1380 
1382 
1389  DLLEXPORT AbstractQoreNode* readHTTPHeader(int timeout_ms, int* prc, int source = QORE_SOURCE_SOCKET);
1390 
1392 
1400  DLLEXPORT AbstractQoreNode* readHTTPHeader(QoreHashNode* info, int timeout_ms, int* prc, int source = QORE_SOURCE_SOCKET);
1401 
1403 
1414  DLLEXPORT QoreHashNode* readHTTPHeader(ExceptionSink* xsink, QoreHashNode* info, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1415 
1417 
1427  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1428 
1430 
1439  DLLEXPORT QoreHashNode* readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1440 
1442 
1453  DLLEXPORT QoreHashNode* readHTTPChunkedBody(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1454 
1456  DLLEXPORT int setSendTimeout(int ms);
1457 
1459  DLLEXPORT int setRecvTimeout(int ms);
1460 
1462  DLLEXPORT int getSendTimeout() const;
1463 
1465  DLLEXPORT int getRecvTimeout() const;
1466 
1468 
1479  DLLEXPORT bool isDataAvailable(int timeout_ms = 0) const;
1480 
1482 
1496  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout_ms = 0) const;
1497 
1499 
1511  DLLEXPORT int asyncIoWait(int timeout_ms, bool read, bool write) const;
1512 
1514 
1518  DLLEXPORT int close();
1519 
1521 
1527  DLLEXPORT int shutdown();
1528 
1530 
1534  DLLEXPORT int shutdownSSL(ExceptionSink* xsink);
1535 
1537 
1539  DLLEXPORT int getSocket() const;
1540 
1542 
1544  DLLEXPORT const QoreEncoding *getEncoding() const;
1545 
1547 
1549  DLLEXPORT void setEncoding(const QoreEncoding *id);
1550 
1552 
1554  DLLEXPORT bool isOpen() const;
1555 
1557 
1559  DLLEXPORT const char* getSSLCipherName() const;
1560 
1562 
1564  DLLEXPORT const char* getSSLCipherVersion() const;
1565 
1567 
1569  DLLEXPORT bool isSecure() const;
1570 
1572  DLLEXPORT long verifyPeerCertificate() const;
1573 
1575 
1583  DLLEXPORT int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
1584 
1586 
1595  DLLEXPORT int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey, int timeout_ms, ExceptionSink* xsink);
1596 
1598 
1607  DLLEXPORT int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey, int timeout_ms, ExceptionSink* xsink);
1608 
1610 
1618  DLLEXPORT int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
1619 
1621 
1630  DLLEXPORT bool isWriteFinished(int timeout_ms = 0) const;
1631 
1633 
1642  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout_ms = 0) const;
1643 
1645 
1656  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink) const;
1657 
1659 
1672  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
1673 
1675 
1687  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink) const;
1688 
1690 
1703  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
1704 
1705  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
1706  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, class Queue* wq, AbstractQoreNode* arg, int64 min_ms = 1000);
1707  DLLEXPORT QoreHashNode* getUsageInfo() const;
1708  DLLEXPORT void clearStats();
1709 
1711  DLLEXPORT void cleanup(ExceptionSink* xsink);
1712 
1714  DLLEXPORT bool pendingHttpChunkedBody() const;
1715 
1717 
1723  DLLEXPORT void setSslVerifyMode(int mode);
1724 
1726 
1730  DLLEXPORT int getSslVerifyMode() const;
1731 
1733 
1737  DLLEXPORT void acceptAllCertificates(bool accept_all = true);
1738 
1740 
1744  DLLEXPORT bool getAcceptAllCertificates() const;
1745 
1746  DLLLOCAL static void doException(int rc, const char* meth, int timeout_ms, ExceptionSink* xsink);
1747 
1749  DLLLOCAL void setEventQueue(Queue* cbq, ExceptionSink* xsink);
1750 
1752  DLLLOCAL Queue* getQueue();
1753 
1755  DLLLOCAL int64 getObjectIDForEvents() const;
1756 
1757  DLLLOCAL int setNoDelay(int nodelay);
1758  DLLLOCAL int getNoDelay() const;
1759 
1761  DLLLOCAL void setAccept(QoreObject* o);
1762 };
1763 
1764 class QoreSocketTimeoutHelper {
1765 protected:
1766  class PrivateQoreSocketTimeoutHelper* priv;
1767 public:
1768  DLLEXPORT QoreSocketTimeoutHelper(QoreSocket& s, const char* op);
1769  DLLEXPORT ~QoreSocketTimeoutHelper();
1770 };
1771 
1772 class QoreSocketThroughputHelper {
1773 protected:
1774  class PrivateQoreSocketThroughputHelper* priv;
1775 public:
1776  DLLEXPORT QoreSocketThroughputHelper(QoreSocket& s, bool snd);
1777  DLLEXPORT ~QoreSocketThroughputHelper();
1778  DLLEXPORT void finalize(int64 bytes);
1779 };
1780 
1781 #endif // _QORE_QORESOCKET_H
#define Q_SOCK_STREAM
platform-independent define for SOCK_STREAM
Definition: common.h:68
DLLEXPORT QoreStringNode * readHTTPHeaderString(ExceptionSink *xsink, int timeout_ms, int source=QORE_SOURCE_SOCKET)
read a HTTP header, caller owns QoreStringNode reference count returned
DLLEXPORT SocketSource()
creates an empty object
defines string encoding functions in Qore
Definition: QoreEncoding.h:85
DLLEXPORT int asyncIoWait(int timeout_ms, bool read, bool write) const
returns 1 if the event was satisfied in the timeout period, 0 if not (= timeout), or -1 in case of an...
a helper class for getting socket origination information
Definition: QoreSocket.h:73
DLLLOCAL int64 getObjectIDForEvents() const
returns a unique ID for the socket to be used in event messages
DLLEXPORT int acceptAndReplace(SocketSource *source)
accepts a new connection on a listening socket and replaces the current socket with the new connectio...
DLLEXPORT int sendi8LSB(int64 i)
sends an 8-byte (64bit) binary integer in LSB (Least Significant Byte first, little endian) format th...
DLLEXPORT int sendi1(char i)
sends a 1-byte binary integer data to a connected socket
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
DLLEXPORT int bind(const char *name, bool reuseaddr=false)
binds to a UNIX domain socket or INET interface:port using TCP and returns a status code ...
DLLLOCAL Queue * getQueue()
returns the event queue (not part of the library&#39;s public API)
DLLEXPORT bool isSecure() const
returns true if an SSL connection is active
DLLEXPORT QoreSocket()
creates an empty, unconnected socket
DLLEXPORT QoreHashNode * readHTTPChunkedBody(int timeout_ms, ExceptionSink *xsink, int source=QORE_SOURCE_SOCKET)
receive a string message in HTTP chunked transfer encoding, caller owns QoreHashNode reference count ...
DLLEXPORT int recvu1(int timeout_ms, unsigned char *val)
reads a 1-byte unsigned integer from the socket with a timeout value and returns the value read as an...
DLLEXPORT AbstractQoreNode * readHTTPHeader(int timeout_ms, int *prc, int source=QORE_SOURCE_SOCKET)
read and parse HTTP header, caller owns AbstractQoreNode reference count returned ...
DLLEXPORT int connectUNIX(const char *p, ExceptionSink *xsink=0)
connects to a UNIX domain socket and returns a status code, Qore-language exceptions are raised in th...
DLLLOCAL void setAccept(QoreObject *o)
sets backwards-compatible members on accept in a new object - will be removed in a future version of ...
DLLEXPORT int recvi2(int timeout_ms, short *val)
reads a 2-byte signed integer in MSB (Most Significant Byte first, big endian, network) format from t...
DLLEXPORT QoreSocket * acceptSSL(SocketSource *source, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
accepts a new connection on a listening socket, negotiates an SSL connection, and returns a new QoreS...
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
DLLEXPORT int bindUNIX(const char *name, ExceptionSink *xsink=0)
binds to a UNIX domain socket and returns a status code
DLLEXPORT int sendi2LSB(short i)
sends a 2-byte (16bit) binary integer in LSB (Least Significant Byte first, little endian) format thr...
DLLEXPORT QoreHashNode * readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink *xsink, int source=QORE_SOURCE_SOCKET)
receive a binary message in HTTP chunked transfer encoding, caller owns QoreHashNode reference count ...
DLLEXPORT int upgradeClientToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
negotiates an SSL connection from the client side
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:74
provides thread-safe access to FTP servers through Qore data structures
Definition: QoreFtpClient.h:71
DLLEXPORT const QoreEncoding * getEncoding() const
returns the character encoding associated with this socket
DLLEXPORT int getSocket() const
returns the file descriptor associated with this socket
DLLEXPORT int shutdown()
calls shutdown on the socket
DLLEXPORT long verifyPeerCertificate() const
returns the peer certificate verification code if an SSL connection is in progress ...
DLLEXPORT bool isDataAvailable(int timeout_ms=0) const
returns true if data is available on the socket in the timeout period in milliseconds ...
DLLEXPORT bool pendingHttpChunkedBody() const
returns true if a HTTP header was read indicating chunked transfer encoding, but no chunked body has ...
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)
binds an INET or INET6 TCP socket to a specific socket address
DLLEXPORT int recvu2LSB(int timeout_ms, unsigned short *val)
reads a 2-byte unsigned integer in LSB (Most Significant Byte first, little endian) format from the s...
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:82
Qore&#39;s string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
DLLEXPORT void setSslVerifyMode(int mode)
sets the SSL verification mode
DLLEXPORT QoreHashNode * getSocketInfo(ExceptionSink *xsink) const
returns information for the current socket; the socket must be open
DLLEXPORT QoreSocket * accept(SocketSource *source, ExceptionSink *xsink)
accepts a new connection on a listening socket and returns a new QoreSocket object for the new connec...
DLLEXPORT QoreStringNode * recv(qore_offset_t bufsize, int timeout_ms, int *prc)
receive a certain number of bytes with a timeout value and return a QoreStringNode, caller owns the reference count returned
DLLEXPORT const char * getSSLCipherName() const
returns the name of the SSL Cipher for the currently-connected control connection, or 0 if there is none
DLLEXPORT void cleanup(ExceptionSink *xsink)
posts deleted message and removes any event queue
DLLEXPORT int getSendTimeout() const
get send timeout in milliseconds
DLLEXPORT ~QoreSocket()
disconnects if necessary, frees all data, and destroys the socket
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)
connects to an INET or INET6 socket by hostname and port number or service name and returns a status ...
DLLLOCAL void setEventQueue(Queue *cbq, ExceptionSink *xsink)
sets the event queue (not part of the library&#39;s pubilc API), must be already referenced before call ...
DLLEXPORT int sendi8(int64 i)
sends an 8-byte (64bit) binary integer in MSB (Most Significant Byte first, big endian, network) format through a connected socket
DLLEXPORT int recvi4LSB(int timeout_ms, int *val)
reads a 4-byte signed integer in LSB (Most Significant Byte first, little endian) format from the soc...
DLLEXPORT bool isWriteFinished(int timeout_ms=0) const
returns true if all write data has been written within the timeout period in milliseconds ...
DLLEXPORT int recvi2LSB(int timeout_ms, short *val)
reads a 2-byte signed integer in LSB (Most Significant Byte first, little endian) format from the soc...
DLLEXPORT int recvu4LSB(int timeout_ms, unsigned int *val)
reads a 4-byte unsigned integer in LSB (Most Significant Byte first, little endian) format from the s...
DLLEXPORT int getSslVerifyMode() const
returns the SSL verification mode
DLLEXPORT int connectUNIXSSL(const char *p, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
connects to a UNIX domain socket, negotiates an SSL connection, and returns a status code...
DLLEXPORT bool isOpen() const
returns true if the socket is open
DLLEXPORT int sendi4(int i)
sends a 4-byte (32bit) binary integer in MSB (Most Significant Byte first, big endian, network) format through a connected socket
DLLEXPORT int connectSSL(const char *name, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
connects to a socket, negotiates an SSL connection, and returns a status code, Qore-language exceptio...
DLLEXPORT void acceptAllCertificates(bool accept_all=true)
with peer verification enabled, all certificates are accepted regardless of the validity of the Certi...
DLLEXPORT const char * getAddress() const
returns the host address string as a C string
DLLEXPORT int listen()
sets an open socket to the listening state
DLLEXPORT ~SocketSource()
destroys the object and frees all memory
DLLEXPORT void setEncoding(const QoreEncoding *id)
sets the character encoding for strings sent and received with this socket
DLLEXPORT QoreStringNode * takeHostName()
returns the hostname string field and leaves the object&#39;s hostname field empty; the caller owns the Q...
DLLEXPORT const char * getSSLCipherVersion() const
returns the version string of the SSL Cipher for the currently-connected control connection, or 0 if there is none
provides access to sockets using Qore data structures
Definition: QoreSocket.h:126
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:62
DLLEXPORT int connect(const char *name, ExceptionSink *xsink=0)
connects to a socket and returns a status code, Qore-language exceptions are raised in the case of an...
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
DLLEXPORT int upgradeServerToSSL(X509 *cert, EVP_PKEY *pkey, int timeout_ms, ExceptionSink *xsink)
negotiates an SSL connection from the client side
DLLEXPORT int recvi4(int timeout_ms, int *val)
reads a 4-byte signed integer in MSB (Most Significant Byte first, big endian, network) format from t...
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)
send an HTTP response message on the socket
DLLEXPORT BinaryNode * recvBinary(qore_offset_t bufsize, int timeout_ms, int *prc)
receive a certain number of bytes with a timeout value and return a BinaryNode, caller owns the refer...
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)
connects to an INET or INET6 socket by hostname and port number or service name and returns a status ...
DLLEXPORT int recvu4(int timeout_ms, unsigned int *val)
reads a 4-byte unsigned integer in MSB (Most Significant Byte first, big endian, network) format from...
DLLEXPORT int shutdownSSL(ExceptionSink *xsink)
shuts down an active SSL connection
DLLEXPORT int connectINETSSL(const char *host, int prt, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
connects to an INET socket by hostname and port number, negotiates an SSL connection, and returns a status code, Qore-language exceptions are raised in the case of any errors
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:241
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:77
DLLEXPORT int sendi2(short i)
sends a 2-byte (16bit) binary integer in MSB (Most Significant Byte first, big endian, network) format through a connected socket
DLLEXPORT int connectINET(const char *host, int prt, ExceptionSink *xsink=0)
connects to an INET socket by hostname and port number and returns a status code, Qore-language excep...
base class for resolved call references
Definition: CallReferenceNode.h:130
DLLEXPORT QoreStringNode * takeAddress()
returns the host address string field and leaves the object&#39;s host address field empty; the caller ow...
DLLEXPORT int recvi8LSB(int timeout_ms, int64 *val)
reads an 8-byte signed integer in LSB (Most Significant Byte first, little endian) format from the so...
DLLEXPORT int getPort()
returns the TCP port number, also assigns the interal port number if it must be discovered ...
DLLEXPORT int setSendTimeout(int ms)
set send timeout in milliseconds
DLLEXPORT int recvi8(int timeout_ms, int64 *val)
reads an 8-byte signed integer in MSB (Most Significant Byte first, big endian, network) format from ...
DLLEXPORT int sendHTTPResponseWithCallback(ExceptionSink *xsink, int code, const char *desc, const char *http_version, const QoreHashNode *headers, const ResolvedCallReferenceNode &send_callback, int source, int timeout_ms)
send an HTTP response message on the socket with a chunked message body using a calback ...
DLLEXPORT int send(const char *buf, qore_size_t size)
sends binary data on a connected socket
DLLEXPORT int setRecvTimeout(int ms)
set recv timeout in milliseconds
DLLEXPORT int close()
closes the socket
DLLEXPORT int recvi1(int timeout_ms, char *val)
reads a 1-byte signed integer from the socket with a timeout value and returns the value read as an o...
DLLEXPORT int getRecvTimeout() const
get recv timeout in milliseconds
DLLEXPORT int recvu2(int timeout_ms, unsigned short *val)
reads a 2-byte unsigned integer in MSB (Most Significant Byte first, big endian, network) format from...
#define Q_AF_UNSPEC
cross-platform define for AF_UNSPEC
Definition: common.h:59
DLLEXPORT bool getAcceptAllCertificates() const
returns the current value of the "accept all certificates" flag
DLLEXPORT int sendi4LSB(int i)
sends a 4-byte (32bit) binary integer in LSB (Least Significant Byte first, little endian) format thr...
DLLEXPORT int sendHTTPMessageWithCallback(ExceptionSink *xsink, QoreHashNode *info, const char *method, const char *path, const char *http_version, const QoreHashNode *headers, const ResolvedCallReferenceNode &send_callback, int source, int timeout_ms)
send an HTTP request message on the socket with a timeout value with a chunked message body using a c...
DLLEXPORT QoreHashNode * getPeerInfo(ExceptionSink *xsink) const
returns peer information for a connected socket
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)
send an HTTP request message on the socket
holds arbitrary binary data
Definition: BinaryNode.h:41
DLLEXPORT const char * getHostName() const
returns the hostname string as a C string