Qore Programming Language  0.8.11
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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  This library is free software; you can redistribute it and/or
14  modify it under the terms of the GNU Lesser General Public
15  License as published by the Free Software Foundation; either
16  version 2.1 of the License, or (at your option) any later version.
17 
18  This library is distributed in the hope that it will be useful,
19  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21  Lesser General Public License for more details.
22 
23  You should have received a copy of the GNU Lesser General Public
24  License along with this library; if not, write to the Free Software
25  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26 */
27 
28 #ifndef _QORE_QORESOCKET_H
29 
30 #define _QORE_QORESOCKET_H
31 
32 #include <qore/Qore.h>
33 
34 #include <sys/types.h>
35 #include <unistd.h>
36 #include <strings.h>
37 #include <string.h>
38 #include <stdlib.h>
39 #include <ctype.h>
40 #include <unistd.h>
41 
42 #include <openssl/ssl.h>
43 #include <openssl/err.h>
44 
45 #define QSE_MISC_ERR 0
46 #define QSE_RECV_ERR -1
47 #define QSE_NOT_OPEN -2
48 #define QSE_TIMEOUT -3
49 #define QSE_SSL_ERR -4
50 #define QSE_IN_OP -5
51 
52 class Queue;
53 
55 
62 class SocketSource {
63  friend struct qore_socket_private;
64 
65 private:
66  struct qore_socketsource_private *priv; // private implementation
67 
69  DLLLOCAL SocketSource(const SocketSource&);
70 
72  DLLLOCAL SocketSource& operator=(const SocketSource&);
73 
74 public:
76  DLLEXPORT SocketSource();
77 
79  DLLEXPORT ~SocketSource();
80 
82 
84  DLLEXPORT QoreStringNode *takeAddress();
85 
87 
89  DLLEXPORT QoreStringNode *takeHostName();
90 
92 
94  DLLEXPORT const char *getAddress() const;
95 
97 
99  DLLEXPORT const char *getHostName() const;
100 
101  DLLLOCAL void setAll(QoreObject *o, ExceptionSink* xsink);
102 };
103 
105 
115 class QoreSocket {
116  friend struct qore_socket_private;
117  friend struct qore_httpclient_priv;
118  friend class QoreSocketObject;
119 
120 private:
122  struct qore_socket_private *priv;
123 
125  DLLLOCAL QoreSocket(int n_sock, int n_sfamily, int n_stype, int s_prot, const QoreEncoding *csid);
126 
127  DLLLOCAL static void convertHeaderToHash(QoreHashNode *h, char *p);
128 
130  DLLLOCAL QoreSocket(const QoreSocket&);
131 
133  DLLLOCAL QoreSocket& operator=(const QoreSocket&);
134 
135 public:
137  DLLEXPORT QoreSocket();
138 
140  DLLEXPORT ~QoreSocket();
141 
143 
154  DLLEXPORT int connect(const char *name, ExceptionSink* xsink = 0);
155 
157 
169  DLLEXPORT int connect(const char *name, int timeout_ms, ExceptionSink* xsink = 0);
170 
172 
182  DLLEXPORT int connectINET(const char *host, int prt, ExceptionSink* xsink = 0);
183 
185 
199  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);
200 
202 
213  DLLEXPORT int connectINET(const char *host, int prt, int timeout_ms, ExceptionSink* xsink = 0);
214 
216 
225  DLLEXPORT int connectUNIX(const char *p, ExceptionSink* xsink = 0);
226 
228 
239  DLLEXPORT int connectUNIX(const char *p, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
240 
242 
257  DLLEXPORT int connectSSL(const char *name, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
258 
260 
276  DLLEXPORT int connectSSL(const char *name, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
277 
279 
293  DLLEXPORT int connectINETSSL(const char *host, int prt, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
294 
296 
311  DLLEXPORT int connectINETSSL(const char *host, int prt, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
312 
314 
330  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);
331 
333 
346  DLLEXPORT int connectUNIXSSL(const char *p, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
347 
349 
364  DLLEXPORT int connectUNIXSSL(const char *p, int socktype, int protocol, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
365 
367 
373  DLLEXPORT int bind(const char *name, bool reuseaddr = false);
374 
376 
381  DLLEXPORT int bind(int prt, bool reuseaddr);
382 
384 
390  DLLEXPORT int bind(const char *iface, int prt, bool reuseaddr = false);
391 
393 
400  DLLEXPORT int bind(const struct sockaddr *addr, int addr_size);
401 
403 
411  DLLEXPORT int bind(int family, const struct sockaddr *addr, int addr_size, int socktype = Q_SOCK_STREAM, int protocol = 0);
412 
414 
422  DLLEXPORT int bindUNIX(const char *name, ExceptionSink* xsink = 0);
423 
425 
435  DLLEXPORT int bindUNIX(const char *name, int socktype, int protocol = 0, ExceptionSink* xsink = 0);
436 
438 
450  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);
451 
453  DLLEXPORT int getPort();
454 
456 
468  DLLEXPORT QoreSocket *accept(SocketSource *source, ExceptionSink* xsink);
469 
471 
486  DLLEXPORT QoreSocket *acceptSSL(SocketSource *source, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
487 
489 
501  DLLEXPORT int acceptAndReplace(SocketSource *source);
502 
504 
515  DLLEXPORT QoreSocket *accept(int timeout_ms, ExceptionSink* xsink);
516 
518 
530  DLLEXPORT QoreSocket *acceptSSL(int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
531 
533 
544  DLLEXPORT int acceptAndReplace(int timeout_ms, ExceptionSink* xsink);
545 
547 
550  DLLEXPORT int listen();
551 
553 
559  DLLEXPORT int listen(int backlog);
560 
562 
568  DLLEXPORT int send(const char *buf, qore_size_t size);
569 
571 
578  DLLEXPORT int send(const char *buf, qore_size_t size, ExceptionSink* xsink);
579 
581 
589  DLLEXPORT int send(const char *buf, qore_size_t size, int timeout_ms, ExceptionSink* xsink);
590 
592 
598  DLLEXPORT int send(const QoreString *msg, ExceptionSink* xsink);
599 
601 
608  DLLEXPORT int send(const QoreString *msg, int timeout_ms, ExceptionSink* xsink);
609 
611 
616  DLLEXPORT int send(const BinaryNode *msg);
617 
619 
625  DLLEXPORT int send(const BinaryNode *msg, ExceptionSink* xsink);
626 
628 
635  DLLEXPORT int send(const BinaryNode *msg, int timeout_ms, ExceptionSink* xsink);
636 
638 
644  DLLEXPORT int send(int fd, qore_offset_t size = -1);
645 
647 
651  DLLEXPORT int sendi1(char i);
652 
654 
659  DLLEXPORT int sendi2(short i);
660 
662 
667  DLLEXPORT int sendi4(int i);
668 
670 
675  DLLEXPORT int sendi8(int64 i);
676 
678 
684  DLLEXPORT int sendi2LSB(short i);
685 
687 
693  DLLEXPORT int sendi4LSB(int i);
694 
696 
702  DLLEXPORT int sendi8LSB(int64 i);
703 
705 
713  DLLEXPORT int sendi1(char i, int timeout_ms, ExceptionSink* xsink);
714 
716 
725  DLLEXPORT int sendi2(short i, int timeout_ms, ExceptionSink* xsink);
726 
728 
737  DLLEXPORT int sendi4(int i, int timeout_ms, ExceptionSink* xsink);
738 
740 
749  DLLEXPORT int sendi8(int64 i, int timeout_ms, ExceptionSink* xsink);
750 
752 
762  DLLEXPORT int sendi2LSB(short i, int timeout_ms, ExceptionSink* xsink);
763 
765 
775  DLLEXPORT int sendi4LSB(int i, int timeout_ms, ExceptionSink* xsink);
776 
778 
788  DLLEXPORT int sendi8LSB(int64 i, int timeout_ms, ExceptionSink* xsink);
789 
791 
800  DLLEXPORT int recvi1(int timeout_ms, char *val);
801 
803 
811  DLLEXPORT int recvi2(int timeout_ms, short *val);
812 
814 
822  DLLEXPORT int recvi4(int timeout_ms, int *val);
823 
825 
833  DLLEXPORT int recvi8(int timeout_ms, int64 *val);
834 
836 
845  DLLEXPORT int recvi2LSB(int timeout_ms, short *val);
846 
848 
857  DLLEXPORT int recvi4LSB(int timeout_ms, int *val);
858 
860 
867  DLLEXPORT int recvi8LSB(int timeout_ms, int64 *val);
868 
870 
876  DLLEXPORT int recvu1(int timeout_ms, unsigned char *val);
877 
879 
887  DLLEXPORT int recvu2(int timeout_ms, unsigned short *val);
888 
890 
898  DLLEXPORT int recvu4(int timeout_ms, unsigned int *val);
899 
901 
910  DLLEXPORT int recvu2LSB(int timeout_ms, unsigned short *val);
911 
913 
922  DLLEXPORT int recvu4LSB(int timeout_ms, unsigned int *val);
923 
925 
935  DLLEXPORT int64 recvi1(int timeout_ms, char *val, ExceptionSink* xsink);
936 
938 
949  DLLEXPORT int64 recvi2(int timeout_ms, short *val, ExceptionSink* xsink);
950 
952 
964  DLLEXPORT int64 recvi4(int timeout_ms, int *val, ExceptionSink* xsink);
965 
967 
978  DLLEXPORT int64 recvi8(int timeout_ms, int64 *val, ExceptionSink* xsink);
979 
981 
993  DLLEXPORT int64 recvi2LSB(int timeout_ms, short *val, ExceptionSink* xsink);
994 
996 
1008  DLLEXPORT int64 recvi4LSB(int timeout_ms, int *val, ExceptionSink* xsink);
1009 
1011 
1022  DLLEXPORT int64 recvi8LSB(int timeout_ms, int64 *val, ExceptionSink* xsink);
1023 
1025 
1035  DLLEXPORT int64 recvu1(int timeout_ms, unsigned char *val, ExceptionSink* xsink);
1036 
1038 
1050  DLLEXPORT int64 recvu2(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1051 
1053 
1065  DLLEXPORT int64 recvu4(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1066 
1068 
1082  DLLEXPORT int64 recvu2LSB(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1083 
1085 
1099  DLLEXPORT int64 recvu4LSB(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1100 
1102 
1109  DLLEXPORT QoreStringNode *recv(qore_offset_t bufsize, int timeout_ms, int *prc);
1110 
1112 
1119  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1120 
1122 
1128  DLLEXPORT BinaryNode *recvBinary(qore_offset_t bufsize, int timeout_ms, int *prc);
1129 
1131 
1137  DLLEXPORT BinaryNode* recvBinary(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1138 
1140 
1149  DLLEXPORT QoreStringNode *recv(int timeout_ms, int *prc);
1150 
1152 
1161  DLLEXPORT QoreStringNode* recv(int timeout_ms, ExceptionSink* xsink);
1162 
1164 
1172  DLLEXPORT BinaryNode *recvBinary(int timeout_ms, int *prc);
1173 
1175 
1183  DLLEXPORT BinaryNode* recvBinary(int timeout_ms, ExceptionSink* xsink);
1184 
1186 
1193  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms);
1194 
1196 
1206  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);
1207 
1209 
1220  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);
1221 
1223 
1237  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);
1238 
1240 
1255  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);
1256 
1258 
1272  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);
1273 
1275 
1287  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);
1288 
1290 
1303  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);
1304 
1306 
1320  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);
1321 
1323 
1336  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);
1337 
1339 
1346  DLLEXPORT AbstractQoreNode *readHTTPHeader(int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1347 
1349 
1357  DLLEXPORT AbstractQoreNode *readHTTPHeader(QoreHashNode *info, int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1358 
1360 
1371  DLLEXPORT QoreHashNode *readHTTPHeader(ExceptionSink* xsink, QoreHashNode *info, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1372 
1374 
1383  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1384 
1386 
1395  DLLEXPORT QoreHashNode *readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1396 
1398 
1409  DLLEXPORT QoreHashNode *readHTTPChunkedBody(int timeout_ms, ExceptionSink* xsink, int source = QORE_SOURCE_SOCKET);
1410 
1412  DLLEXPORT int setSendTimeout(int ms);
1413 
1415  DLLEXPORT int setRecvTimeout(int ms);
1416 
1418  DLLEXPORT int getSendTimeout() const;
1419 
1421  DLLEXPORT int getRecvTimeout() const;
1422 
1424 
1429  DLLEXPORT bool isDataAvailable(int timeout_ms = 0) const;
1430 
1432 
1441  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout_ms = 0) const;
1442 
1444 
1448  DLLEXPORT int close();
1449 
1451 
1457  DLLEXPORT int shutdown();
1458 
1460 
1464  DLLEXPORT int shutdownSSL(ExceptionSink* xsink);
1465 
1467 
1469  DLLEXPORT int getSocket() const;
1470 
1472 
1474  DLLEXPORT const QoreEncoding *getEncoding() const;
1475 
1477 
1479  DLLEXPORT void setEncoding(const QoreEncoding *id);
1480 
1482 
1484  DLLEXPORT bool isOpen() const;
1485 
1487 
1489  DLLEXPORT const char *getSSLCipherName() const;
1490 
1492 
1494  DLLEXPORT const char *getSSLCipherVersion() const;
1495 
1497 
1499  DLLEXPORT bool isSecure() const;
1500 
1502  DLLEXPORT long verifyPeerCertificate() const;
1503 
1505 
1513  DLLEXPORT int upgradeClientToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
1514 
1516 
1524  DLLEXPORT int upgradeServerToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink* xsink);
1525 
1527 
1532  DLLEXPORT bool isWriteFinished(int timeout_ms = 0) const;
1533 
1535 
1544  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout_ms = 0) const;
1545 
1547 
1558  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink) const;
1559 
1561 
1574  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
1575 
1577 
1590  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink) const;
1591 
1593 
1605  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
1606 
1607  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
1608  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, class Queue* wq, AbstractQoreNode* arg, int64 min_ms = 1000);
1609  DLLEXPORT QoreHashNode* getUsageInfo() const;
1610  DLLEXPORT void clearStats();
1611 
1613  DLLEXPORT void cleanup(ExceptionSink* xsink);
1614 
1616  DLLEXPORT bool pendingHttpChunkedBody() const;
1617 
1618  DLLLOCAL static void doException(int rc, const char *meth, int timeout_ms, ExceptionSink* xsink);
1619 
1621  DLLLOCAL void setEventQueue(Queue* cbq, ExceptionSink* xsink);
1622 
1624  DLLLOCAL Queue* getQueue();
1625 
1627  DLLLOCAL int64 getObjectIDForEvents() const;
1628 
1629  DLLLOCAL int setNoDelay(int nodelay);
1630  DLLLOCAL int getNoDelay() const;
1631 
1633  DLLLOCAL void setAccept(QoreObject *o);
1634 };
1635 
1636 class QoreSocketTimeoutHelper {
1637 protected:
1638  class PrivateQoreSocketTimeoutHelper* priv;
1639 public:
1640  DLLEXPORT QoreSocketTimeoutHelper(QoreSocket& s, const char* op);
1641  DLLEXPORT ~QoreSocketTimeoutHelper();
1642 };
1643 
1644 class QoreSocketThroughputHelper {
1645 protected:
1646  class PrivateQoreSocketThroughputHelper* priv;
1647 public:
1648  DLLEXPORT QoreSocketThroughputHelper(QoreSocket& s, bool snd);
1649  DLLEXPORT ~QoreSocketThroughputHelper();
1650  DLLEXPORT void finalize(int64 bytes);
1651 };
1652 
1653 #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:56
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:72
a helper class for getting socket origination information
Definition: QoreSocket.h:62
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:41
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:47
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:62
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:65
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:42
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:40
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:115
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:56
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:35
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:120
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:47
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:33