Qore Programming Language  0.9.3.1
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 - 2019 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 <cctype>
45 #include <cstdlib>
46 #include <cstring>
47 #include <strings.h>
48 #include <sys/types.h>
49 #include <unistd.h>
50 
51 #include <openssl/ssl.h>
52 #include <openssl/err.h>
53 
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
59 #define QSE_IN_OP -5
60 #define QSE_IN_OP_THREAD -6
61 
62 // forward reference
63 class Queue;
64 
66 
73 class SocketSource {
74  friend hashdecl qore_socket_private;
75 
76 private:
77  hashdecl 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 hashdecl qore_socket_private;
128  friend hashdecl qore_httpclient_priv;
129  friend class QoreSocketObject;
130  friend class QoreFtpClient;
131 
132 private:
134  hashdecl 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 
1237  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms, ExceptionSink* xsink);
1238 
1240 
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);
1251 
1253 
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);
1265 
1267 
1281  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);
1282 
1284 
1299  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);
1300 
1302 
1316  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);
1317 
1319 
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);
1332 
1334 
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);
1348 
1350 
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);
1365 
1367 
1380  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);
1381 
1383 
1390  DLLEXPORT AbstractQoreNode* readHTTPHeader(int timeout_ms, int* prc, int source = QORE_SOURCE_SOCKET);
1391 
1393 
1401  DLLEXPORT AbstractQoreNode* readHTTPHeader(QoreHashNode* info, int timeout_ms, int* prc, int source = QORE_SOURCE_SOCKET);
1402 
1404 
1415  DLLEXPORT QoreHashNode* readHTTPHeader(ExceptionSink* xsink, QoreHashNode* info, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1416 
1418 
1428  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1429 
1431 
1440  DLLEXPORT QoreHashNode* readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1441 
1443 
1454  DLLEXPORT QoreHashNode* readHTTPChunkedBody(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1455 
1457  DLLEXPORT int setSendTimeout(int ms);
1458 
1460  DLLEXPORT int setRecvTimeout(int ms);
1461 
1463  DLLEXPORT int getSendTimeout() const;
1464 
1466  DLLEXPORT int getRecvTimeout() const;
1467 
1469 
1480  DLLEXPORT bool isDataAvailable(int timeout_ms = 0) const;
1481 
1483 
1497  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout_ms = 0) const;
1498 
1500 
1512  DLLEXPORT int asyncIoWait(int timeout_ms, bool read, bool write) const;
1513 
1515 
1519  DLLEXPORT int close();
1520 
1522 
1528  DLLEXPORT int shutdown();
1529 
1531 
1535  DLLEXPORT int shutdownSSL(ExceptionSink* xsink);
1536 
1538 
1540  DLLEXPORT int getSocket() const;
1541 
1543 
1545  DLLEXPORT const QoreEncoding *getEncoding() const;
1546 
1548 
1550  DLLEXPORT void setEncoding(const QoreEncoding *id);
1551 
1553 
1555  DLLEXPORT bool isOpen() const;
1556 
1558 
1560  DLLEXPORT const char* getSSLCipherName() const;
1561 
1563 
1565  DLLEXPORT const char* getSSLCipherVersion() const;
1566 
1568 
1570  DLLEXPORT bool isSecure() const;
1571 
1573  DLLEXPORT long verifyPeerCertificate() const;
1574 
1576 
1584  DLLEXPORT int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
1585 
1587 
1596  DLLEXPORT int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey, int timeout_ms, ExceptionSink* xsink);
1597 
1599 
1608  DLLEXPORT int upgradeClientToSSL(X509* cert, EVP_PKEY* pkey, int timeout_ms, ExceptionSink* xsink);
1609 
1611 
1619  DLLEXPORT int upgradeServerToSSL(X509* cert, EVP_PKEY* pkey, ExceptionSink* xsink);
1620 
1622 
1631  DLLEXPORT bool isWriteFinished(int timeout_ms = 0) const;
1632 
1634 
1643  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout_ms = 0) const;
1644 
1646 
1657  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink) const;
1658 
1660 
1673  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
1674 
1676 
1688  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink) const;
1689 
1691 
1704  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
1705 
1706  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
1707  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, Queue* wq, QoreValue arg, int64 min_ms = 1000);
1708  DLLEXPORT QoreHashNode* getUsageInfo() const;
1709  DLLEXPORT void clearStats();
1710 
1712  DLLEXPORT void cleanup(ExceptionSink* xsink);
1713 
1715  DLLEXPORT bool pendingHttpChunkedBody() const;
1716 
1718 
1724  DLLEXPORT void setSslVerifyMode(int mode);
1725 
1727 
1731  DLLEXPORT int getSslVerifyMode() const;
1732 
1734 
1738  DLLEXPORT void acceptAllCertificates(bool accept_all = true);
1739 
1741 
1745  DLLEXPORT bool getAcceptAllCertificates() const;
1746 
1748 
1756  DLLEXPORT bool captureRemoteCertificates(bool set);
1757 
1759 
1765  DLLEXPORT QoreObject* getRemoteCertificate() const;
1766 
1768 
1772  DLLEXPORT int64 getConnectionId() const;
1773 
1774  DLLLOCAL static void doException(int rc, const char* meth, int timeout_ms, ExceptionSink* xsink);
1775 
1777  DLLLOCAL void setEventQueue(Queue* cbq, ExceptionSink* xsink);
1778 
1780  DLLLOCAL Queue* getQueue();
1781 
1783  DLLLOCAL int64 getObjectIDForEvents() const;
1784 
1785  DLLLOCAL int setNoDelay(int nodelay);
1786  DLLLOCAL int getNoDelay() const;
1787 
1789  DLLLOCAL void setAccept(QoreObject* o);
1790 };
1791 
1792 class QoreSocketTimeoutHelper {
1793 protected:
1794  class PrivateQoreSocketTimeoutHelper* priv;
1795 public:
1796  DLLEXPORT QoreSocketTimeoutHelper(QoreSocket& s, const char* op);
1797  DLLEXPORT ~QoreSocketTimeoutHelper();
1798 };
1799 
1800 class QoreSocketThroughputHelper {
1801 protected:
1802  class PrivateQoreSocketThroughputHelper* priv;
1803 public:
1804  DLLEXPORT QoreSocketThroughputHelper(QoreSocket& s, bool snd);
1805  DLLEXPORT ~QoreSocketThroughputHelper();
1806  DLLEXPORT void finalize(int64 bytes);
1807 };
1808 
1809 #endif // _QORE_QORESOCKET_H
#define Q_SOCK_STREAM
platform-independent define for SOCK_STREAM
Definition: common.h:67
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:83
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 bool captureRemoteCertificates(bool set)
sets the capture SSL certificate flag
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:73
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 QoreObject * getRemoteCertificate() const
returns a remote certificate if available
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:81
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
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 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:61
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:46
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 int64 getConnectionId() const
returns a connection ID to help identifying when new connections are made
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:260
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:76
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:105
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:58
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