Qore Programming Language  0.8.9
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
QoreSocketObject.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreSocketObject.h
4 
5  Qore Programming Language
6 
7  Copyright 2003 - 2014 David Nichols
8 
9  provides a thread-safe interface to the QoreSocket object
10 
11  This library is free software; you can redistribute it and/or
12  modify it under the terms of the GNU Lesser General Public
13  License as published by the Free Software Foundation; either
14  version 2.1 of the License, or (at your option) any later version.
15 
16  This library is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  Lesser General Public License for more details.
20 
21  You should have received a copy of the GNU Lesser General Public
22  License along with this library; if not, write to the Free Software
23  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 */
25 
26 #ifndef _QORE_QORE_SOCKET_OBJECT_H
27 
28 #define _QORE_QORE_SOCKET_OBJECT_H
29 
30 #include <qore/QoreSocket.h>
31 #include <qore/AbstractPrivateData.h>
32 #include <qore/QoreThreadLock.h>
33 
34 class QoreSSLCertificate;
35 class QoreSSLPrivateKey;
36 class Queue;
37 class my_socket_priv;
38 
39 class QoreSocketObject : public AbstractPrivateData {
40 private:
41  friend class my_socket_priv;
42 
43  DLLLOCAL QoreSocketObject(QoreSocket* s);
44 
45 protected:
46  my_socket_priv* priv;
47 
48  DLLLOCAL virtual ~QoreSocketObject();
49 
50 public:
51  DLLEXPORT QoreSocketObject();
52 
53  DLLEXPORT virtual void deref(ExceptionSink* xsink);
54  DLLEXPORT virtual void deref();
55 
56  DLLEXPORT int connect(const char* name, int timeout_ms, ExceptionSink* xsink = NULL);
57  DLLEXPORT int connectINET(const char* host, int port, int timeout_ms, ExceptionSink* xsink = NULL);
58  DLLEXPORT int connectINET2(const char* host, const char* service, int family, int sock_type, int protocol, int timeout_ms = -1, ExceptionSink* xsink = NULL);
59  DLLEXPORT int connectUNIX(const char* p, int socktype, int protocol, ExceptionSink* xsink = NULL);
60  DLLEXPORT int connectSSL(const char* name, int timeout_ms, ExceptionSink* xsink);
61  DLLEXPORT int connectINETSSL(const char* host, int port, int timeout_ms, ExceptionSink* xsink);
62  DLLEXPORT int connectINET2SSL(const char* host, const char* service, int family, int sock_type, int protocol, int timeout_ms = -1, ExceptionSink* xsink = NULL);
63  DLLEXPORT int connectUNIXSSL(const char* p, int socktype, int protocol, ExceptionSink* xsink);
64  // to bind to either a UNIX socket or an INET interface:port
65  DLLEXPORT int bind(const char* name, bool reuseaddr = false);
66  // to bind to an INET tcp port on all interfaces
67  DLLEXPORT int bind(int port, bool reuseaddr = false);
68  // to bind an open socket to an INET tcp port on a specific interface
69  DLLEXPORT int bind(const char* iface, int port, bool reuseaddr = false);
70 
71  DLLEXPORT int bindUNIX(const char* name, int socktype, int protocol, ExceptionSink* xsink);
72  DLLEXPORT int bindINET(const char* name, const char* service, bool reuseaddr, int family, int socktype, int protocol, ExceptionSink* xsink);
73 
74  // get port number for INET sockets
75  DLLEXPORT int getPort();
76  DLLEXPORT QoreSocketObject *accept(SocketSource *source, ExceptionSink* xsink);
77  DLLEXPORT QoreSocketObject *acceptSSL(SocketSource *source, ExceptionSink* xsink);
78  DLLEXPORT QoreSocketObject *accept(int timeout_ms, ExceptionSink* xsink);
79  DLLEXPORT QoreSocketObject *acceptSSL(int timeout_ms, ExceptionSink* xsink);
80 
81  DLLEXPORT int listen(int backlog);
82  // send a buffer of a particular size
83  DLLEXPORT int send(const char* buf, int size);
84  DLLEXPORT int send(const char* buf, int size, int timeout_ms, ExceptionSink* xsink);
85  // send a null-terminated string
86  DLLEXPORT int send(const QoreString *msg, int timeout_ms, ExceptionSink* xsink);
87  // send a binary object
88  DLLEXPORT int send(const BinaryNode* b);
89  DLLEXPORT int send(const BinaryNode* b, int timeout_ms, ExceptionSink* xsink);
90  // send from a file descriptor
91  DLLEXPORT int send(int fd, int size = -1);
92  // send bytes and convert to network order
93  DLLEXPORT int sendi1(char b, int timeout_ms, ExceptionSink* xsink);
94  DLLEXPORT int sendi2(short b, int timeout_ms, ExceptionSink* xsink);
95  DLLEXPORT int sendi4(int b, int timeout_ms, ExceptionSink* xsink);
96  DLLEXPORT int sendi8(int64 b, int timeout_ms, ExceptionSink* xsink);
97  DLLEXPORT int sendi2LSB(short b, int timeout_ms, ExceptionSink* xsink);
98  DLLEXPORT int sendi4LSB(int b, int timeout_ms, ExceptionSink* xsink);
99  DLLEXPORT int sendi8LSB(int64 b, int timeout_ms, ExceptionSink* xsink);
100  // receive a message
101  DLLEXPORT QoreStringNode* recv(int timeout, ExceptionSink* xsink);
102  // receive a certain number of bytes as a string
103  DLLEXPORT QoreStringNode* recv(qore_offset_t bufsize, int timeout_ms, ExceptionSink* xsink);
104  // receive a certain number of bytes as a binary object
105  DLLEXPORT BinaryNode* recvBinary(int bufsize, int timeout, ExceptionSink* xsink);
106  // receive a packet of bytes as a binary object
107  DLLEXPORT BinaryNode* recvBinary(int timeout, ExceptionSink* xsink);
108  // receive and write data to a file descriptor
109  DLLEXPORT int recv(int fd, int size, int timeout);
110  // receive integers and convert from network byte order
111  DLLEXPORT int64 recvi1(int timeout, char* b, ExceptionSink* xsink);
112  DLLEXPORT int64 recvi2(int timeout, short *b, ExceptionSink* xsink);
113  DLLEXPORT int64 recvi4(int timeout, int *b, ExceptionSink* xsink);
114  DLLEXPORT int64 recvi8(int timeout, int64 *b, ExceptionSink* xsink);
115  DLLEXPORT int64 recvi2LSB(int timeout, short *b, ExceptionSink* xsink);
116  DLLEXPORT int64 recvi4LSB(int timeout, int *b, ExceptionSink* xsink);
117  DLLEXPORT int64 recvi8LSB(int timeout, int64 *b, ExceptionSink* xsink);
118  DLLEXPORT int64 recvu1(int timeout, unsigned char* b, ExceptionSink* xsink);
119  DLLEXPORT int64 recvu2(int timeout, unsigned short *b, ExceptionSink* xsink);
120  DLLEXPORT int64 recvu4(int timeout, unsigned int *b, ExceptionSink* xsink);
121  DLLEXPORT int64 recvu2LSB(int timeout, unsigned short *b, ExceptionSink* xsink);
122  DLLEXPORT int64 recvu4LSB(int timeout, unsigned int *b, ExceptionSink* xsink);
123  // send HTTP message
124  DLLEXPORT int sendHTTPMessage(ExceptionSink* xsink, QoreHashNode* info, const char* method, const char* path, const char* http_version, const QoreHashNode* headers, const void* ptr, int size, int source, int timeout_ms);
125  // send HTTP response
126  DLLEXPORT int sendHTTPResponse(ExceptionSink* xsink, int code, const char* desc, const char* http_version, const QoreHashNode* headers, const void* ptr, int size, int source, int timeout_ms);
127  // read and parse HTTP header
128  DLLEXPORT AbstractQoreNode* readHTTPHeader(ExceptionSink* xsink, QoreHashNode* info, int timeout);
129  // receive a binary message in HTTP chunked format
130  DLLEXPORT QoreHashNode* readHTTPChunkedBodyBinary(int timeout, ExceptionSink* xsink);
131  // receive a string message in HTTP chunked format
132  DLLEXPORT QoreHashNode* readHTTPChunkedBody(int timeout, ExceptionSink* xsink);
133 
134  DLLEXPORT QoreStringNode* readHTTPHeaderString(ExceptionSink* xsink, int timeout_ms);
135 
136  DLLEXPORT int setSendTimeout(int ms);
137  DLLEXPORT int setRecvTimeout(int ms);
138  DLLEXPORT int getSendTimeout();
139  DLLEXPORT int getRecvTimeout();
140  DLLEXPORT int close();
141  DLLEXPORT int shutdown();
142  DLLEXPORT int shutdownSSL(ExceptionSink* xsink) ;
143  DLLEXPORT const char* getSSLCipherName();
144  DLLEXPORT const char* getSSLCipherVersion();
145  DLLEXPORT bool isSecure();
146  DLLEXPORT long verifyPeerCertificate();
147  DLLEXPORT int getSocket();
148  DLLEXPORT void setEncoding(const QoreEncoding *id);
149  DLLEXPORT const QoreEncoding *getEncoding() const;
150  DLLEXPORT bool isDataAvailable(ExceptionSink* xsink, int timeout = 0);
151  DLLEXPORT bool isWriteFinished(ExceptionSink* xsink, int timeout = 0);
152  DLLEXPORT bool isOpen() const;
153  // c must be already referenced before this call
154  DLLEXPORT void setCertificate(QoreSSLCertificate* c);
155  // p must be already referenced before this call
156  DLLEXPORT void setPrivateKey(QoreSSLPrivateKey* p);
157  DLLEXPORT int setNoDelay(int nodelay);
158  DLLEXPORT int getNoDelay();
159  DLLEXPORT void setEventQueue(Queue *cbq, ExceptionSink* xsink);
160  DLLEXPORT QoreHashNode* getPeerInfo(ExceptionSink* xsink, bool host_lookup = true) const;
161  DLLEXPORT QoreHashNode* getSocketInfo(ExceptionSink* xsink, bool host_lookup = true) const;
162 
163  DLLEXPORT void upgradeClientToSSL(ExceptionSink* xsink);
164  DLLEXPORT void upgradeServerToSSL(ExceptionSink* xsink);
165 
166  DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
167  DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, class Queue* wq, AbstractQoreNode* arg, int64 min_ms = 1000);
168  DLLEXPORT QoreHashNode* getUsageInfo() const;
169  DLLEXPORT void clearStats();
170 };
171 
172 #endif // _QORE_QORE_SOCKET_OBJECT_H
defines string encoding functions in Qore
Definition: QoreEncoding.h:72
a helper class for getting socket origination information
Definition: QoreSocket.h:61
represents an X509 certificate, reference-counted, dynamically-allocated only
Definition: QoreSSLCertificate.h:34
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:41
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:36
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:47
long qore_offset_t
used for offsets that could be negative
Definition: common.h:65
provides access to a private key data structure for SSL connections
Definition: QoreSSLPrivateKey.h:32
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
virtual DLLLOCAL void deref()
decrements the reference count of the object without the possibility of throwing a Qore-language exce...
Definition: AbstractPrivateData.h:57
provides access to sockets using Qore data structures
Definition: QoreSocket.h:113
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:35
holds arbitrary binary data
Definition: BinaryNode.h:33