Qore Programming Language  0.8.11.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 - 2014 David Nichols
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 
42 #include <sys/types.h>
43 #include <unistd.h>
44 #include <strings.h>
45 #include <string.h>
46 #include <stdlib.h>
47 #include <ctype.h>
48 #include <unistd.h>
49 
50 #include <openssl/ssl.h>
51 #include <openssl/err.h>
52 
53 #define QSE_MISC_ERR 0
54 #define QSE_RECV_ERR -1
55 #define QSE_NOT_OPEN -2
56 #define QSE_TIMEOUT -3
57 #define QSE_SSL_ERR -4
58 #define QSE_IN_OP -5
59 
60 class Queue;
61 
63 
70 class SocketSource {
71  friend struct qore_socket_private;
72 
73 private:
74  struct qore_socketsource_private *priv; // private implementation
75 
77  DLLLOCAL SocketSource(const SocketSource&);
78 
80  DLLLOCAL SocketSource& operator=(const SocketSource&);
81 
82 public:
84  DLLEXPORT SocketSource();
85 
87  DLLEXPORT ~SocketSource();
88 
90 
92  DLLEXPORT QoreStringNode *takeAddress();
93 
95 
97  DLLEXPORT QoreStringNode *takeHostName();
98 
100 
102  DLLEXPORT const char *getAddress() const;
103 
105 
107  DLLEXPORT const char *getHostName() const;
108 
109  DLLLOCAL void setAll(QoreObject *o, ExceptionSink* xsink);
110 };
111 
113 
123 class QoreSocket {
124  friend struct qore_socket_private;
125  friend struct qore_httpclient_priv;
126  friend class QoreSocketObject;
127 
128 private:
130  struct qore_socket_private *priv;
131 
133  DLLLOCAL QoreSocket(int n_sock, int n_sfamily, int n_stype, int s_prot, const QoreEncoding *csid);
134 
135  DLLLOCAL static void convertHeaderToHash(QoreHashNode *h, char *p);
136 
138  DLLLOCAL QoreSocket(const QoreSocket&);
139 
141  DLLLOCAL QoreSocket& operator=(const QoreSocket&);
142 
143 public:
145  DLLEXPORT QoreSocket();
146 
148  DLLEXPORT ~QoreSocket();
149 
151 
162  DLLEXPORT int connect(const char *name, ExceptionSink* xsink = 0);
163 
165 
177  DLLEXPORT int connect(const char *name, int timeout_ms, ExceptionSink* xsink = 0);
178 
180 
190  DLLEXPORT int connectINET(const char *host, int prt, ExceptionSink* xsink = 0);
191 
193 
207  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);
208 
210 
221  DLLEXPORT int connectINET(const char *host, int prt, int timeout_ms, ExceptionSink* xsink = 0);
222 
224 
233  DLLEXPORT int connectUNIX(const char *p, ExceptionSink* xsink = 0);
234 
236 
247  DLLEXPORT int connectUNIX(const char *p, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
248 
250 
265  DLLEXPORT int connectSSL(const char *name, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
266 
268 
284  DLLEXPORT int connectSSL(const char *name, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
285 
287 
301  DLLEXPORT int connectINETSSL(const char *host, int prt, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
302 
304 
319  DLLEXPORT int connectINETSSL(const char *host, int prt, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
320 
322 
338  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);
339 
341 
354  DLLEXPORT int connectUNIXSSL(const char *p, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
355 
357 
372  DLLEXPORT int connectUNIXSSL(const char *p, int socktype, int protocol, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
373 
375 
381  DLLEXPORT int bind(const char *name, bool reuseaddr = false);
382 
384 
389  DLLEXPORT int bind(int prt, bool reuseaddr);
390 
392 
398  DLLEXPORT int bind(const char *iface, int prt, bool reuseaddr = false);
399 
401 
408  DLLEXPORT int bind(const struct sockaddr *addr, int addr_size);
409 
411 
419  DLLEXPORT int bind(int family, const struct sockaddr *addr, int addr_size, int socktype = Q_SOCK_STREAM, int protocol = 0);
420 
422 
430  DLLEXPORT int bindUNIX(const char *name, ExceptionSink* xsink = 0);
431 
433 
443  DLLEXPORT int bindUNIX(const char *name, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
444 
446 
458  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);
459 
461  DLLEXPORT int getPort();
462 
464 
476  DLLEXPORT QoreSocket *accept(SocketSource *source, ExceptionSink* xsink);
477 
479 
494  DLLEXPORT QoreSocket *acceptSSL(SocketSource *source, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
495 
497 
509  DLLEXPORT int acceptAndReplace(SocketSource *source);
510 
512 
523  DLLEXPORT QoreSocket *accept(int timeout_ms, ExceptionSink* xsink);
524 
526 
538  DLLEXPORT QoreSocket *acceptSSL(int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
539 
541 
552  DLLEXPORT int acceptAndReplace(int timeout_ms, ExceptionSink* xsink);
553 
555 
558  DLLEXPORT int listen();
559 
561 
567  DLLEXPORT int listen(int backlog);
568 
570 
576  DLLEXPORT int send(const char *buf, qore_size_t size);
577 
579 
586  DLLEXPORT int send(const char *buf, qore_size_t size, ExceptionSink* xsink);
587 
589 
597  DLLEXPORT int send(const char *buf, qore_size_t size, int timeout_ms, ExceptionSink* xsink);
598 
600 
606  DLLEXPORT int send(const QoreString *msg, ExceptionSink* xsink);
607 
609 
616  DLLEXPORT int send(const QoreString *msg, int timeout_ms, ExceptionSink* xsink);
617 
619 
624  DLLEXPORT int send(const BinaryNode *msg);
625 
627 
633  DLLEXPORT int send(const BinaryNode *msg, ExceptionSink* xsink);
634 
636 
643  DLLEXPORT int send(const BinaryNode *msg, int timeout_ms, ExceptionSink* xsink);
644 
646 
652  DLLEXPORT int send(int fd, qore_offset_t size = -1);
653 
655 
659  DLLEXPORT int sendi1(char i);
660 
662 
667  DLLEXPORT int sendi2(short i);
668 
670 
675  DLLEXPORT int sendi4(int i);
676 
678 
683  DLLEXPORT int sendi8(int64 i);
684 
686 
692  DLLEXPORT int sendi2LSB(short i);
693 
695 
701  DLLEXPORT int sendi4LSB(int i);
702 
704 
710  DLLEXPORT int sendi8LSB(int64 i);
711 
713 
721  DLLEXPORT int sendi1(char i, int timeout_ms, ExceptionSink* xsink);
722 
724 
733  DLLEXPORT int sendi2(short i, int timeout_ms, ExceptionSink* xsink);
734 
736 
745  DLLEXPORT int sendi4(int i, int timeout_ms, ExceptionSink* xsink);
746 
748 
757  DLLEXPORT int sendi8(int64 i, int timeout_ms, ExceptionSink* xsink);
758 
760 
770  DLLEXPORT int sendi2LSB(short i, int timeout_ms, ExceptionSink* xsink);
771 
773 
783  DLLEXPORT int sendi4LSB(int i, int timeout_ms, ExceptionSink* xsink);
784 
786 
796  DLLEXPORT int sendi8LSB(int64 i, int timeout_ms, ExceptionSink* xsink);
797 
799 
808  DLLEXPORT int recvi1(int timeout_ms, char *val);
809 
811 
819  DLLEXPORT int recvi2(int timeout_ms, short *val);
820 
822 
830  DLLEXPORT int recvi4(int timeout_ms, int *val);
831 
833 
841  DLLEXPORT int recvi8(int timeout_ms, int64 *val);
842 
844 
853  DLLEXPORT int recvi2LSB(int timeout_ms, short *val);
854 
856 
865  DLLEXPORT int recvi4LSB(int timeout_ms, int *val);
866 
868 
875  DLLEXPORT int recvi8LSB(int timeout_ms, int64 *val);
876 
878 
884  DLLEXPORT int recvu1(int timeout_ms, unsigned char *val);
885 
887 
895  DLLEXPORT int recvu2(int timeout_ms, unsigned short *val);
896 
898 
906  DLLEXPORT int recvu4(int timeout_ms, unsigned int *val);
907 
909 
918  DLLEXPORT int recvu2LSB(int timeout_ms, unsigned short *val);
919 
921 
930  DLLEXPORT int recvu4LSB(int timeout_ms, unsigned int *val);
931 
933 
943  DLLEXPORT int64 recvi1(int timeout_ms, char *val, ExceptionSink* xsink);
944 
946 
957  DLLEXPORT int64 recvi2(int timeout_ms, short *val, ExceptionSink* xsink);
958 
960 
972  DLLEXPORT int64 recvi4(int timeout_ms, int *val, ExceptionSink* xsink);
973 
975 
986  DLLEXPORT int64 recvi8(int timeout_ms, int64 *val, ExceptionSink* xsink);
987 
989 
1001  DLLEXPORT int64 recvi2LSB(int timeout_ms, short *val, ExceptionSink* xsink);
1002 
1004 
1016  DLLEXPORT int64 recvi4LSB(int timeout_ms, int *val, ExceptionSink* xsink);
1017 
1019 
1030  DLLEXPORT int64 recvi8LSB(int timeout_ms, int64 *val, ExceptionSink* xsink);
1031 
1033 
1043  DLLEXPORT int64 recvu1(int timeout_ms, unsigned char *val, ExceptionSink* xsink);
1044 
1046 
1058  DLLEXPORT int64 recvu2(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1059 
1061 
1073  DLLEXPORT int64 recvu4(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1074 
1076 
1090  DLLEXPORT int64 recvu2LSB(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1091 
1093 
1107  DLLEXPORT int64 recvu4LSB(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1108 
1110 
1117  DLLEXPORT QoreStringNode *recv(qore_offset_t bufsize, int timeout_ms, int *prc);
1118 
1120 
1127  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1128 
1130 
1136  DLLEXPORT BinaryNode *recvBinary(qore_offset_t bufsize, int timeout_ms, int *prc);
1137 
1139 
1145  DLLEXPORT BinaryNode* recvBinary(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1146 
1148 
1157  DLLEXPORT QoreStringNode *recv(int timeout_ms, int *prc);
1158 
1160 
1169  DLLEXPORT QoreStringNode* recv(int timeout_ms, ExceptionSink* xsink);
1170 
1172 
1180  DLLEXPORT BinaryNode *recvBinary(int timeout_ms, int *prc);
1181 
1183 
1191  DLLEXPORT BinaryNode* recvBinary(int timeout_ms, ExceptionSink* xsink);
1192 
1194 
1201  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms);
1202 
1204 
1214  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);
1215 
1217 
1228  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);
1229 
1231 
1245  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);
1246 
1248 
1263  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);
1264 
1266 
1280  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);
1281 
1283 
1295  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);
1296 
1298 
1311  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);
1312 
1314 
1328  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);
1329 
1331 
1344  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);
1345 
1347 
1354  DLLEXPORT AbstractQoreNode *readHTTPHeader(int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1355 
1357 
1365  DLLEXPORT AbstractQoreNode *readHTTPHeader(QoreHashNode *info, int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1366 
1368 
1379  DLLEXPORT QoreHashNode *readHTTPHeader(ExceptionSink* xsink, QoreHashNode *info, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1380 
1382 
1391  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1392 
1394 
1403  DLLEXPORT QoreHashNode *readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1404 
1406 
1417  DLLEXPORT QoreHashNode *readHTTPChunkedBody(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1418 
1420  DLLEXPORT int setSendTimeout(int ms);
1421 
1423  DLLEXPORT int setRecvTimeout(int ms);
1424 
1426  DLLEXPORT int getSendTimeout() const;
1427 
1429  DLLEXPORT int getRecvTimeout() const;
1430 
1432 
1437  DLLEXPORT bool isDataAvailable(int timeout_ms = 0) const;
1438 
1440 
1449  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout_ms = 0) const;
1450 
1452 
1456  DLLEXPORT int close();
1457 
1459 
1465  DLLEXPORT int shutdown();
1466 
1468 
1472  DLLEXPORT int shutdownSSL(ExceptionSink* xsink);
1473 
1475 
1477  DLLEXPORT int getSocket() const;
1478 
1480 
1482  DLLEXPORT const QoreEncoding *getEncoding() const;
1483 
1485 
1487  DLLEXPORT void setEncoding(const QoreEncoding *id);
1488 
1490 
1492  DLLEXPORT bool isOpen() const;
1493 
1495 
1497  DLLEXPORT const char *getSSLCipherName() const;
1498 
1500 
1502  DLLEXPORT const char *getSSLCipherVersion() const;
1503 
1505 
1507  DLLEXPORT bool isSecure() const;
1508 
1510  DLLEXPORT long verifyPeerCertificate() const;
1511 
1513 
1521  DLLEXPORT int upgradeClientToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
1522 
1524 
1532  DLLEXPORT int upgradeServerToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
1533 
1535 
1540  DLLEXPORT bool isWriteFinished(int timeout_ms = 0) const;
1541 
1543 
1552  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout_ms = 0) const;
1553 
1555 
1566  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink) const;
1567 
1569 
1582  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
1583 
1585 
1598  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink) const;
1599 
1601 
1613  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
1614 
1615  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
1616  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, class Queue* wq, AbstractQoreNode* arg, int64 min_ms = 1000);
1617  DLLEXPORT QoreHashNode* getUsageInfo() const;
1618  DLLEXPORT void clearStats();
1619 
1621  DLLEXPORT void cleanup(ExceptionSink* xsink);
1622 
1624  DLLEXPORT bool pendingHttpChunkedBody() const;
1625 
1626  DLLLOCAL static void doException(int rc, const char *meth, int timeout_ms, ExceptionSink* xsink);
1627 
1629  DLLLOCAL void setEventQueue(Queue* cbq, ExceptionSink* xsink);
1630 
1632  DLLLOCAL Queue* getQueue();
1633 
1635  DLLLOCAL int64 getObjectIDForEvents() const;
1636 
1637  DLLLOCAL int setNoDelay(int nodelay);
1638  DLLLOCAL int getNoDelay() const;
1639 
1641  DLLLOCAL void setAccept(QoreObject *o);
1642 };
1643 
1644 class QoreSocketTimeoutHelper {
1645 protected:
1646  class PrivateQoreSocketTimeoutHelper* priv;
1647 public:
1648  DLLEXPORT QoreSocketTimeoutHelper(QoreSocket& s, const char* op);
1649  DLLEXPORT ~QoreSocketTimeoutHelper();
1650 };
1651 
1652 class QoreSocketThroughputHelper {
1653 protected:
1654  class PrivateQoreSocketThroughputHelper* priv;
1655 public:
1656  DLLEXPORT QoreSocketThroughputHelper(QoreSocket& s, bool snd);
1657  DLLEXPORT ~QoreSocketThroughputHelper();
1658  DLLEXPORT void finalize(int64 bytes);
1659 };
1660 
1661 #endif // _QORE_QORESOCKET_H
DLLEXPORT bool isOpen() const
returns true if the socket is open
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
#define Q_SOCK_STREAM
platform-independent define for SOCK_STREAM
Definition: common.h:64
DLLEXPORT QoreStringNode * readHTTPHeaderString(ExceptionSink *xsink, int timeout_ms, int source=QORE_SOURCE_SOCKET)
read a HTTP header, caller owns QoreStringNode reference count returned
DLLEXPORT bool isSecure() const
returns true if an SSL connection is active
DLLEXPORT SocketSource()
creates an empty object
defines string encoding functions in Qore
Definition: QoreEncoding.h:80
a helper class for getting socket origination information
Definition: QoreSocket.h:70
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:49
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 int64 getObjectIDForEvents() const
returns a unique ID for the socket to be used in event messages
DLLEXPORT QoreHashNode * getPeerInfo(ExceptionSink *xsink) const
returns peer information for a connected socket
DLLLOCAL Queue * getQueue()
returns the event queue (not part of the library's public API)
DLLEXPORT long verifyPeerCertificate() const
returns the peer certificate verification code if an SSL connection is in progress ...
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 const char * getAddress() const
returns the host address string as a C string
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:55
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 bool pendingHttpChunkedBody() const
returns true if a HTTP header was read indicating chunked transfer encoding, but no chunked body has ...
DLLEXPORT int upgradeClientToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
negotiates an SSL connection from the client side
DLLEXPORT const QoreEncoding * getEncoding() const
returns the character encoding associated with this socket
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:70
DLLEXPORT bool isDataAvailable(int timeout_ms=0) const
returns true if data is available on the socket in the timeout period in milliseconds ...
long qore_offset_t
used for offsets that could be negative
Definition: common.h:73
DLLEXPORT int shutdown()
calls shutdown on the socket
DLLEXPORT int getSocket() const
returns the file descriptor associated with this socket
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's string type supported by the QoreEncoding class.
Definition: QoreString.h:50
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:48
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 * getHostName() const
returns the hostname string as a C string
DLLEXPORT void cleanup(ExceptionSink *xsink)
posts deleted message and removes any event queue
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'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 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 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 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 bool isWriteFinished(int timeout_ms=0) const
returns true if all write data has been written within the timeout period in milliseconds ...
DLLEXPORT int listen()
sets an open socket to the listening state
DLLEXPORT int getRecvTimeout() const
get recv timeout in milliseconds
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's hostname field empty; the caller owns the Q...
provides access to sockets using Qore data structures
Definition: QoreSocket.h:123
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:64
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:43
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
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:128
DLLEXPORT QoreStringNode * takeAddress()
returns the host address string field and leaves the object'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 getSendTimeout() const
get send timeout in milliseconds
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 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:55
DLLEXPORT int upgradeServerToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink)
negotiates an SSL connection from the client side
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 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 * getSocketInfo(ExceptionSink *xsink) const
returns information for the current socket; the socket must be open
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