Qore Programming Language  0.8.9
 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 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 
51 class Queue;
52 
54 
61 class SocketSource {
62  friend struct qore_socket_private;
63 private:
64  struct qore_socketsource_private *priv; // private implementation
65 
67  DLLLOCAL SocketSource(const SocketSource&);
68 
70  DLLLOCAL SocketSource& operator=(const SocketSource&);
71 
72 public:
74  DLLEXPORT SocketSource();
75 
77  DLLEXPORT ~SocketSource();
78 
80 
82  DLLEXPORT QoreStringNode *takeAddress();
83 
85 
87  DLLEXPORT QoreStringNode *takeHostName();
88 
90 
92  DLLEXPORT const char *getAddress() const;
93 
95 
97  DLLEXPORT const char *getHostName() const;
98 
99  DLLLOCAL void setAll(QoreObject *o, ExceptionSink *xsink);
100 };
101 
103 
113 class QoreSocket {
114  friend struct qore_socket_private;
115 private:
117  struct qore_socket_private *priv;
118 
120  DLLLOCAL QoreSocket(int n_sock, int n_sfamily, int n_stype, int s_prot, const QoreEncoding *csid);
121 
122  DLLLOCAL static void convertHeaderToHash(QoreHashNode *h, char *p);
123 
125  DLLLOCAL QoreSocket(const QoreSocket&);
126 
128  DLLLOCAL QoreSocket& operator=(const QoreSocket&);
129 
130 public:
132  DLLEXPORT QoreSocket();
133 
135  DLLEXPORT ~QoreSocket();
136 
138 
149  DLLEXPORT int connect(const char *name, ExceptionSink *xsink = 0);
150 
152 
164  DLLEXPORT int connect(const char *name, int timeout_ms, ExceptionSink *xsink = 0);
165 
167 
177  DLLEXPORT int connectINET(const char *host, int prt, ExceptionSink *xsink = 0);
178 
180 
194  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);
195 
197 
208  DLLEXPORT int connectINET(const char *host, int prt, int timeout_ms, ExceptionSink *xsink = 0);
209 
211 
220  DLLEXPORT int connectUNIX(const char *p, ExceptionSink *xsink = 0);
221 
223 
234  DLLEXPORT int connectUNIX(const char *p, int socktype, int protocol = 0, ExceptionSink *xsink = 0);
235 
237 
252  DLLEXPORT int connectSSL(const char *name, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
253 
255 
271  DLLEXPORT int connectSSL(const char *name, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
272 
274 
288  DLLEXPORT int connectINETSSL(const char *host, int prt, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
289 
291 
306  DLLEXPORT int connectINETSSL(const char *host, int prt, int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
307 
309 
325  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);
326 
328 
341  DLLEXPORT int connectUNIXSSL(const char *p, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
342 
344 
359  DLLEXPORT int connectUNIXSSL(const char *p, int socktype, int protocol, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
360 
362 
368  DLLEXPORT int bind(const char *name, bool reuseaddr = false);
369 
371 
376  DLLEXPORT int bind(int prt, bool reuseaddr);
377 
379 
385  DLLEXPORT int bind(const char *iface, int prt, bool reuseaddr = false);
386 
388 
395  DLLEXPORT int bind(const struct sockaddr *addr, int addr_size);
396 
398 
406  DLLEXPORT int bind(int family, const struct sockaddr *addr, int addr_size, int socktype = Q_SOCK_STREAM, int protocol = 0);
407 
409 
417  DLLEXPORT int bindUNIX(const char *name, ExceptionSink *xsink = 0);
418 
420 
430  DLLEXPORT int bindUNIX(const char *name, int socktype, int protocol = 0, ExceptionSink *xsink = 0);
431 
433 
445  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);
446 
448  DLLEXPORT int getPort();
449 
451 
463  DLLEXPORT QoreSocket *accept(SocketSource *source, ExceptionSink *xsink);
464 
466 
481  DLLEXPORT QoreSocket *acceptSSL(SocketSource *source, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
482 
484 
496  DLLEXPORT int acceptAndReplace(SocketSource *source);
497 
499 
510  DLLEXPORT QoreSocket *accept(int timeout_ms, ExceptionSink *xsink);
511 
513 
525  DLLEXPORT QoreSocket *acceptSSL(int timeout_ms, X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
526 
528 
539  DLLEXPORT int acceptAndReplace(int timeout_ms, ExceptionSink *xsink);
540 
542 
545  DLLEXPORT int listen();
546 
548 
554  DLLEXPORT int listen(int backlog);
555 
557 
563  DLLEXPORT int send(const char *buf, qore_size_t size);
564 
566 
573  DLLEXPORT int send(const char *buf, qore_size_t size, ExceptionSink* xsink);
574 
576 
584  DLLEXPORT int send(const char *buf, qore_size_t size, int timeout_ms, ExceptionSink* xsink);
585 
587 
593  DLLEXPORT int send(const QoreString *msg, ExceptionSink *xsink);
594 
596 
603  DLLEXPORT int send(const QoreString *msg, int timeout_ms, ExceptionSink *xsink);
604 
606 
611  DLLEXPORT int send(const BinaryNode *msg);
612 
614 
620  DLLEXPORT int send(const BinaryNode *msg, ExceptionSink* xsink);
621 
623 
630  DLLEXPORT int send(const BinaryNode *msg, int timeout_ms, ExceptionSink* xsink);
631 
633 
639  DLLEXPORT int send(int fd, qore_offset_t size = -1);
640 
642 
646  DLLEXPORT int sendi1(char i);
647 
649 
654  DLLEXPORT int sendi2(short i);
655 
657 
662  DLLEXPORT int sendi4(int i);
663 
665 
670  DLLEXPORT int sendi8(int64 i);
671 
673 
679  DLLEXPORT int sendi2LSB(short i);
680 
682 
688  DLLEXPORT int sendi4LSB(int i);
689 
691 
697  DLLEXPORT int sendi8LSB(int64 i);
698 
700 
708  DLLEXPORT int sendi1(char i, int timeout_ms, ExceptionSink* xsink);
709 
711 
720  DLLEXPORT int sendi2(short i, int timeout_ms, ExceptionSink* xsink);
721 
723 
732  DLLEXPORT int sendi4(int i, int timeout_ms, ExceptionSink* xsink);
733 
735 
744  DLLEXPORT int sendi8(int64 i, int timeout_ms, ExceptionSink* xsink);
745 
747 
757  DLLEXPORT int sendi2LSB(short i, int timeout_ms, ExceptionSink* xsink);
758 
760 
770  DLLEXPORT int sendi4LSB(int i, int timeout_ms, ExceptionSink* xsink);
771 
773 
783  DLLEXPORT int sendi8LSB(int64 i, int timeout_ms, ExceptionSink* xsink);
784 
786 
795  DLLEXPORT int recvi1(int timeout_ms, char *val);
796 
798 
806  DLLEXPORT int recvi2(int timeout_ms, short *val);
807 
809 
817  DLLEXPORT int recvi4(int timeout_ms, int *val);
818 
820 
828  DLLEXPORT int recvi8(int timeout_ms, int64 *val);
829 
831 
840  DLLEXPORT int recvi2LSB(int timeout_ms, short *val);
841 
843 
852  DLLEXPORT int recvi4LSB(int timeout_ms, int *val);
853 
855 
862  DLLEXPORT int recvi8LSB(int timeout_ms, int64 *val);
863 
865 
871  DLLEXPORT int recvu1(int timeout_ms, unsigned char *val);
872 
874 
882  DLLEXPORT int recvu2(int timeout_ms, unsigned short *val);
883 
885 
893  DLLEXPORT int recvu4(int timeout_ms, unsigned int *val);
894 
896 
905  DLLEXPORT int recvu2LSB(int timeout_ms, unsigned short *val);
906 
908 
917  DLLEXPORT int recvu4LSB(int timeout_ms, unsigned int *val);
918 
920 
930  DLLEXPORT int64 recvi1(int timeout_ms, char *val, ExceptionSink* xsink);
931 
933 
944  DLLEXPORT int64 recvi2(int timeout_ms, short *val, ExceptionSink* xsink);
945 
947 
959  DLLEXPORT int64 recvi4(int timeout_ms, int *val, ExceptionSink* xsink);
960 
962 
973  DLLEXPORT int64 recvi8(int timeout_ms, int64 *val, ExceptionSink* xsink);
974 
976 
988  DLLEXPORT int64 recvi2LSB(int timeout_ms, short *val, ExceptionSink* xsink);
989 
991 
1003  DLLEXPORT int64 recvi4LSB(int timeout_ms, int *val, ExceptionSink* xsink);
1004 
1006 
1017  DLLEXPORT int64 recvi8LSB(int timeout_ms, int64 *val, ExceptionSink* xsink);
1018 
1020 
1030  DLLEXPORT int64 recvu1(int timeout_ms, unsigned char *val, ExceptionSink* xsink);
1031 
1033 
1045  DLLEXPORT int64 recvu2(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1046 
1048 
1060  DLLEXPORT int64 recvu4(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1061 
1063 
1077  DLLEXPORT int64 recvu2LSB(int timeout_ms, unsigned short *val, ExceptionSink* xsink);
1078 
1080 
1094  DLLEXPORT int64 recvu4LSB(int timeout_ms, unsigned int *val, ExceptionSink* xsink);
1095 
1097 
1104  DLLEXPORT QoreStringNode *recv(qore_offset_t bufsize, int timeout_ms, int *prc);
1105 
1107 
1114  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1115 
1117 
1123  DLLEXPORT BinaryNode *recvBinary(qore_offset_t bufsize, int timeout_ms, int *prc);
1124 
1126 
1132  DLLEXPORT BinaryNode* recvBinary(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
1133 
1135 
1144  DLLEXPORT QoreStringNode *recv(int timeout_ms, int *prc);
1145 
1147 
1156  DLLEXPORT QoreStringNode* recv(int timeout_ms, ExceptionSink* xsink);
1157 
1159 
1167  DLLEXPORT BinaryNode *recvBinary(int timeout_ms, int *prc);
1168 
1170 
1178  DLLEXPORT BinaryNode* recvBinary(int timeout_ms, ExceptionSink* xsink);
1179 
1181 
1188  DLLEXPORT int recv(int fd, qore_offset_t size, int timeout_ms);
1189 
1191 
1201  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);
1202 
1204 
1215  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);
1216 
1218 
1232  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);
1233 
1235 
1250  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);
1251 
1253 
1265  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);
1266 
1268 
1281  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);
1282 
1284 
1298  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);
1299 
1301 
1308  DLLEXPORT AbstractQoreNode *readHTTPHeader(int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1309 
1311 
1319  DLLEXPORT AbstractQoreNode *readHTTPHeader(QoreHashNode *info, int timeout_ms, int *prc, int source = QORE_SOURCE_SOCKET);
1320 
1322 
1333  DLLEXPORT QoreHashNode *readHTTPHeader(ExceptionSink* xsink, QoreHashNode *info, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1334 
1336 
1345  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms, int source = QORE_SOURCE_SOCKET);
1346 
1348 
1357  DLLEXPORT QoreHashNode *readHTTPChunkedBodyBinary(int timeout_ms, ExceptionSink *xsink, int source = QORE_SOURCE_SOCKET);
1358 
1360 
1371  DLLEXPORT QoreHashNode *readHTTPChunkedBody(int timeout_ms, ExceptionSink *xsink, int source = QORE_SOURCE_SOCKET);
1372 
1374  DLLEXPORT int setSendTimeout(int ms);
1375 
1377  DLLEXPORT int setRecvTimeout(int ms);
1378 
1380  DLLEXPORT int getSendTimeout() const;
1381 
1383  DLLEXPORT int getRecvTimeout() const;
1384 
1386 
1391  DLLEXPORT bool isDataAvailable(int timeout_ms = 0) const;
1392 
1394 
1403  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout_ms = 0) const;
1404 
1406 
1410  DLLEXPORT int close();
1411 
1413 
1419  DLLEXPORT int shutdown();
1420 
1422 
1426  DLLEXPORT int shutdownSSL(ExceptionSink *xsink);
1427 
1429 
1431  DLLEXPORT int getSocket() const;
1432 
1434 
1436  DLLEXPORT const QoreEncoding *getEncoding() const;
1437 
1439 
1441  DLLEXPORT void setEncoding(const QoreEncoding *id);
1442 
1444 
1446  DLLEXPORT bool isOpen() const;
1447 
1449 
1451  DLLEXPORT const char *getSSLCipherName() const;
1452 
1454 
1456  DLLEXPORT const char *getSSLCipherVersion() const;
1457 
1459 
1461  DLLEXPORT bool isSecure() const;
1462 
1464  DLLEXPORT long verifyPeerCertificate() const;
1465 
1467 
1475  DLLEXPORT int upgradeClientToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
1476 
1478 
1486  DLLEXPORT int upgradeServerToSSL(X509 *cert, EVP_PKEY *pkey, ExceptionSink *xsink);
1487 
1489 
1494  DLLEXPORT bool isWriteFinished(int timeout_ms = 0) const;
1495 
1497 
1506  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout_ms = 0) const;
1507 
1509 
1520  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink) const;
1521 
1523 
1536  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup) const;
1537 
1539 
1552  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink) const;
1553 
1555 
1567  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup) const;
1568 
1569  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
1570  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, class Queue* wq, AbstractQoreNode* arg, int64 min_ms = 1000);
1571  DLLEXPORT QoreHashNode* getUsageInfo() const;
1572  DLLEXPORT void clearStats();
1573 
1574  DLLLOCAL static void doException(int rc, const char *meth, int timeout_ms, ExceptionSink *xsink);
1575 
1577  DLLLOCAL void setEventQueue(Queue *cbq, ExceptionSink *xsink);
1578 
1580  DLLLOCAL Queue *getQueue();
1581 
1583  DLLLOCAL int64 getObjectIDForEvents() const;
1584 
1586  DLLLOCAL void cleanup(ExceptionSink *xsink);
1587 
1588  DLLLOCAL int setNoDelay(int nodelay);
1589  DLLLOCAL int getNoDelay() const;
1590 
1592  DLLLOCAL void setAccept(QoreObject *o);
1593 };
1594 
1595 #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:61
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&#39;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...
DLLLOCAL void cleanup(ExceptionSink *xsink)
posts deleted message and removes any event queue
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 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&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:42
Qore&#39;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 ~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 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&#39;s hostname field empty; the caller owns the Q...
provides access to sockets using Qore data structures
Definition: QoreSocket.h:113
the implementation of Qore&#39;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 &quot;thread_exit&quot; 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...
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 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 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 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