Qore Programming Language 0.8.8

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

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 - 2013 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
165 DLLEXPORT void upgradeServerToSSL(ExceptionSink* xsink);
166 };
167
168 #endif // _QORE_QORE_SOCKET_OBJECT_H
QoreEncoding
defines string encoding functions in Qore
Definition: QoreEncoding.h:72
SocketSource
a helper class for getting socket origination information
Definition: QoreSocket.h:61
QoreSSLCertificate
represents an X509 certificate, reference-counted, dynamically-allocated only
Definition: QoreSSLCertificate.h:34
QoreHashNode
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:41
AbstractPrivateData
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:36
AbstractQoreNode
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:47
qore_offset_t
long qore_offset_t
used for offsets that could be negative
Definition: common.h:64
QoreSSLPrivateKey
provides access to a private key data structure for SSL connections
Definition: QoreSSLPrivateKey.h:32
QoreString
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:42
QoreStringNode
Qore&#39;s string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:40
AbstractPrivateData::deref
virtual DLLLOCAL void deref()
decrements the reference count of the object without the possibility of throwing a Qore-language exce...
Definition: AbstractPrivateData.h:57
QoreSocket
provides access to sockets using Qore data structures
Definition: QoreSocket.h:113
ExceptionSink
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:35
BinaryNode
holds arbitrary binary data
Definition: BinaryNode.h:33