| Qore Programming Language - C/C++ Library 1.0.8

QoreHttpClientObject.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3 QoreHttpClientObject.h
4
5 Qore Programming Language
6
7 Copyright (C) 2006 - 2020 Qore Technologies, s.r.o.
8
9 Permission is hereby granted, free of charge, to any person obtaining a
10 copy of this software and associated documentation files (the "Software"),
11 to deal in the Software without restriction, including without limitation
12 the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 and/or sell copies of the Software, and to permit persons to whom the
14 Software is furnished to do so, subject to the following conditions:
15
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26
27 Note that the Qore library is released under a choice of three open-source
28 licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
29 information.
30 */
31
32 #ifndef QORE_HTTP_CLIENT_OBJECT_H_
33 #define QORE_HTTP_CLIENT_OBJECT_H_
34
35 #include <qore/common.h>
36 #include <qore/QoreSocketObject.h>
37 #include <qore/OutputStream.h>
38
39 #define HTTPCLIENT_DEFAULT_PORT 80
40 #define HTTPCLIENT_DEFAULT_HOST "localhost"
41
42 #define HTTPCLIENT_DEFAULT_TIMEOUT 300000
43
44 #define HTTPCLIENT_DEFAULT_MAX_REDIRECTS 5
45
46 class Queue;
47
49
51 class QoreHttpClientObject : public QoreSocketObject {
52 private:
54 struct qore_httpclient_priv* http_priv;
55
57 DLLLOCAL QoreHttpClientObject(const QoreHttpClientObject&);
58
60 DLLLOCAL QoreHttpClientObject& operator=(const QoreHttpClientObject&);
61
62 protected:
63 DLLEXPORT void lock();
64 DLLEXPORT void unlock();
65
66 public:
68 DLLEXPORT QoreHttpClientObject();
69
71 DLLEXPORT virtual ~QoreHttpClientObject();
72
74
91 DLLEXPORT int setOptions(const QoreHashNode* opts, ExceptionSink* xsink);
92
94
96 DLLEXPORT void setDefaultPort(int prt);
97
99
101 DLLEXPORT void setDefaultPath(const char* pth);
102
104
106 DLLEXPORT const char* getDefaultPath() const;
107
109
111 DLLEXPORT const char* getConnectionPath() const;
112
114
116 DLLEXPORT void setConnectionPath(const char* path);
117
119
121 DLLEXPORT void addProtocol(const char* prot, int port, bool ssl = false);
122
124 DLLEXPORT void setTimeout(int to);
125
127 DLLEXPORT int getTimeout() const;
128
130 DLLEXPORT void setEncoding(const QoreEncoding* qe);
131
133 DLLEXPORT const QoreEncoding* getEncoding() const;
134
136
141 DLLEXPORT int setHTTPVersion(const char* version, ExceptionSink* xsink);
142
144
147 DLLEXPORT const char* getHTTPVersion() const;
148
150
153 DLLEXPORT void setHTTP11(bool h11);
154
156 DLLEXPORT bool isHTTP11() const;
157
159
163 DLLEXPORT int setURL(const char* url, ExceptionSink* xsink);
164
166
169 DLLEXPORT QoreStringNode* getURL();
170
172
176 DLLEXPORT void setUserPassword(const char* user, const char* pass);
177
179 DLLEXPORT void clearUserPassword();
180
182
186 DLLEXPORT int setProxyURL(const char* proxy, ExceptionSink* xsink);
187
189
192 DLLEXPORT QoreStringNode* getProxyURL();
193
195 DLLEXPORT void clearProxyURL();
196
198
202 DLLEXPORT void setProxyUserPassword(const char* user, const char* pass);
203
205 DLLEXPORT void clearProxyUserPassword();
206
208 DLLEXPORT void setSecure(bool is_secure);
209
211 DLLEXPORT bool isSecure() const;
212
214 DLLEXPORT void setProxySecure(bool is_secure);
215
217 DLLEXPORT bool isProxySecure() const;
218
220 DLLEXPORT void setMaxRedirects(int max);
221
223 DLLEXPORT int getMaxRedirects() const;
224
226
228 DLLEXPORT int connect(ExceptionSink* xsink);
229
231 DLLEXPORT void disconnect();
232
234
245 DLLEXPORT QoreHashNode* send(const char* meth, const char* path, const QoreHashNode* headers, const void* data,
246 unsigned size, bool getbody, QoreHashNode* info, ExceptionSink* xsink);
247
248 DLLEXPORT QoreHashNode* send(const char* meth, const char* path, const QoreHashNode* headers,
249 const QoreStringNode& body, bool getbody, QoreHashNode* info, ExceptionSink* xsink);
250
251 DLLEXPORT QoreHashNode* sendWithSendCallback(const char* meth, const char* mpath, const QoreHashNode* headers,
252 const ResolvedCallReferenceNode* send_callback, bool getbody, QoreHashNode* info, int timeout_ms,
253 ExceptionSink* xsink);
254
255 DLLEXPORT void sendWithRecvCallback(const char* meth, const char* mpath, const QoreHashNode* headers,
256 const void* data, unsigned size, bool getbody, QoreHashNode* info, int timeout_ms,
257 const ResolvedCallReferenceNode* recv_callback, QoreObject* obj, ExceptionSink* xsink);
258
259 DLLEXPORT void sendWithRecvCallback(const char* meth, const char* mpath, const QoreHashNode* headers,
260 const QoreStringNode& body, bool getbody, QoreHashNode* info, int timeout_ms,
261 const ResolvedCallReferenceNode* recv_callback, QoreObject* obj, ExceptionSink* xsink);
262
263 DLLEXPORT void sendWithCallbacks(const char* meth, const char* mpath, const QoreHashNode* headers,
264 const ResolvedCallReferenceNode* send_callback, bool getbody, QoreHashNode* info, int timeout_ms,
265 const ResolvedCallReferenceNode* recv_callback, QoreObject* obj, ExceptionSink* xsink);
266
268
270 DLLEXPORT void sendWithOutputStream(const char* meth, const char* mpath, const QoreHashNode* headers,
271 const void* data, unsigned size, bool getbody, QoreHashNode* info, int timeout_ms,
272 const ResolvedCallReferenceNode* recv_callback, QoreObject* obj, OutputStream *os, ExceptionSink* xsink);
273
275
277 DLLEXPORT void sendWithOutputStream(const char* meth, const char* mpath, const QoreHashNode* headers,
278 const QoreStringNode& body, bool getbody, QoreHashNode* info, int timeout_ms,
279 const ResolvedCallReferenceNode* recv_callback, QoreObject* obj, OutputStream *os, ExceptionSink* xsink);
280
282
284 DLLEXPORT void sendChunked(const char* meth, const char* mpath, const QoreHashNode* headers, bool getbody,
285 QoreHashNode* info, int timeout_ms, const ResolvedCallReferenceNode* recv_callback, QoreObject* obj,
286 OutputStream *os, InputStream* is, size_t max_chunk_size, const ResolvedCallReferenceNode* trailer_callback,
287 ExceptionSink* xsink);
288
290
298 DLLEXPORT AbstractQoreNode* get(const char* path, const QoreHashNode* headers, QoreHashNode* info, ExceptionSink* xsink);
299
301
308 DLLEXPORT QoreHashNode* head(const char* path, const QoreHashNode* headers, QoreHashNode* info, ExceptionSink* xsink);
309
311
321 DLLEXPORT AbstractQoreNode* post(const char* path, const QoreHashNode* headers, const void* data, unsigned size, QoreHashNode* info, ExceptionSink* xsink);
322
324
336 DLLEXPORT AbstractQoreNode* post(const char* path, const QoreHashNode* headers, const QoreStringNode& body,
337 QoreHashNode* info, ExceptionSink* xsink);
338
340
344 DLLEXPORT void setDefaultHeaderValue(const char* header, const char* val);
345
347
351 DLLEXPORT void addDefaultHeaders(const QoreHashNode* hdr);
352
354
358 DLLEXPORT QoreHashNode* getDefaultHeaders() const;
359
360 using AbstractPrivateData::deref;
362
365 DLLEXPORT virtual void deref(ExceptionSink* xsink);
366
368
371 DLLEXPORT void setConnectTimeout(int ms);
372
374
377 DLLEXPORT int getConnectTimeout() const;
378
380
389 DLLEXPORT int setNoDelay(bool nodelay);
390
392 DLLEXPORT void setEventQueue(Queue* cbq, ExceptionSink* xsink);
393
395 DLLEXPORT void setEventQueue(ExceptionSink* xsink, Queue* q, QoreValue arg, bool with_data);
396
398 DLLEXPORT bool getNoDelay() const;
399
401 DLLEXPORT bool isConnected() const;
402
404 DLLEXPORT void setPersistent(ExceptionSink* xsink);
405
406 DLLEXPORT void clearWarningQueue(ExceptionSink* xsink);
407 DLLEXPORT void setWarningQueue(ExceptionSink* xsink, int64 warning_ms, int64 warning_bs, Queue* wq, QoreValue arg, int64 min_ms = 1000);
408 DLLEXPORT QoreHashNode* getUsageInfo() const;
409 DLLEXPORT void clearStats();
410
412
414 DLLEXPORT bool setErrorPassthru(bool set);
415
417
419 DLLEXPORT bool getErrorPassthru() const;
420
422
424 DLLEXPORT bool setRedirectPassthru(bool set);
425
427
429 DLLEXPORT bool getRedirectPassthru() const;
430
432
434 DLLEXPORT bool setEncodingPassthru(bool set);
435
437
439 DLLEXPORT bool getEncodingPassthru() const;
440
442
444 DLLEXPORT QoreStringNode* getHostHeaderValue() const;
445
447
449 DLLEXPORT void setAssumedEncoding(const char* enc);
450
452
454 DLLEXPORT QoreStringNode* getAssumedEncoding() const;
455
456 DLLLOCAL static void static_init();
457
458 DLLLOCAL void cleanup(ExceptionSink* xsink);
459 };
460
461 #endif
QoreHttpClientObject::setErrorPassthru
DLLEXPORT bool setErrorPassthru(bool set)
sets the new and returns the old error_passthru status
QoreHttpClientObject::clearProxyUserPassword
DLLEXPORT void clearProxyUserPassword()
clears the username and password for the proxy connection
QoreHttpClientObject::head
DLLEXPORT QoreHashNode * head(const char *path, const QoreHashNode *headers, QoreHashNode *info, ExceptionSink *xsink)
sends an HTTP "HEAD" method and returns the headers returned, the caller owns the QoreHashNode refere...
QoreHttpClientObject::getEncodingPassthru
DLLEXPORT bool getEncodingPassthru() const
returns the current encoding_passthru status
QoreEncoding
defines string encoding functions in Qore
Definition: QoreEncoding.h:83
QoreHttpClientObject::getURL
DLLEXPORT QoreStringNode * getURL()
returns the connection parameters as a URL, caller owns the reference count returned ...
QoreHttpClientObject::setPersistent
DLLEXPORT void setPersistent(ExceptionSink *xsink)
temporarily disables implicit reconnections; must be called when the server is already connected ...
QoreHttpClientObject::connect
DLLEXPORT int connect(ExceptionSink *xsink)
opens a connection and returns a code giving the result
QoreHashNode
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
QoreHttpClientObject::getDefaultHeaders
DLLEXPORT QoreHashNode * getDefaultHeaders() const
Returns a hash of default headers to be sent with every outgoing request.
QoreHttpClientObject::isProxySecure
DLLEXPORT bool isProxySecure() const
returns the SSL proxy connection parameter flag
QoreHttpClientObject::setOptions
DLLEXPORT int setOptions(const QoreHashNode *opts, ExceptionSink *xsink)
set options with a hash, returns -1 if an exception was thrown, 0 for OK
QoreHttpClientObject::getTimeout
DLLEXPORT int getTimeout() const
returns the connection and response packet timeout value in milliseconds
QoreHttpClientObject::getConnectTimeout
DLLEXPORT int getConnectTimeout() const
returns the connect timeout in ms, negative numbers mean no timeout
QoreHttpClientObject::sendWithOutputStream
DLLEXPORT void sendWithOutputStream(const char *meth, const char *mpath, const QoreHashNode *headers, const void *data, unsigned size, bool getbody, QoreHashNode *info, int timeout_ms, const ResolvedCallReferenceNode *recv_callback, QoreObject *obj, OutputStream *os, ExceptionSink *xsink)
make an HTTP request and receive the response to an OutputStream
QoreHttpClientObject::sendChunked
DLLEXPORT void sendChunked(const char *meth, const char *mpath, const QoreHashNode *headers, bool getbody, QoreHashNode *info, int timeout_ms, const ResolvedCallReferenceNode *recv_callback, QoreObject *obj, OutputStream *os, InputStream *is, size_t max_chunk_size, const ResolvedCallReferenceNode *trailer_callback, ExceptionSink *xsink)
send a chunked HTTP message through an InputStream and receive the response to an OutputStream ...
QoreHttpClientObject::QoreHttpClientObject
DLLEXPORT QoreHttpClientObject()
creates the QoreHttpClientObject object
AbstractQoreNode
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:57
QoreHttpClientObject::setAssumedEncoding
DLLEXPORT void setAssumedEncoding(const char *enc)
sets the assumed encoding
QoreHttpClientObject::getHTTPVersion
DLLEXPORT const char * getHTTPVersion() const
returns the http version as a string (either "1.0" or "1.1")
QoreHttpClientObject::setTimeout
DLLEXPORT void setTimeout(int to)
sets the connection and response packet timeout value in milliseconds
QoreHttpClientObject::setDefaultPath
DLLEXPORT void setDefaultPath(const char *pth)
sets the default path
QoreHttpClientObject::setEncodingPassthru
DLLEXPORT bool setEncodingPassthru(bool set)
sets the new and returns the old encoding_passthru status
QoreHttpClientObject::setProxyURL
DLLEXPORT int setProxyURL(const char *proxy, ExceptionSink *xsink)
sets the proxy URL
QoreHttpClientObject::getConnectionPath
DLLEXPORT const char * getConnectionPath() const
returns the current connection path or 0 if none is set
QoreHttpClientObject::addProtocol
DLLEXPORT void addProtocol(const char *prot, int port, bool ssl=false)
adds a protocol
OutputStream
Interface for private data of output streams.
Definition: OutputStream.h:44
QoreHttpClientObject::~QoreHttpClientObject
virtual DLLEXPORT ~QoreHttpClientObject()
destroys the object and frees all associated memory
QoreHttpClientObject::setURL
DLLEXPORT int setURL(const char *url, ExceptionSink *xsink)
sets the connection URL
QoreHttpClientObject::setDefaultPort
DLLEXPORT void setDefaultPort(int prt)
sets the default port
QoreStringNode
Qore&#39;s string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
QoreHttpClientObject::isSecure
DLLEXPORT bool isSecure() const
returns the SSL connection parameter flag
QoreHttpClientObject::setHTTP11
DLLEXPORT void setHTTP11(bool h11)
sets or clears HTTP 1.1 protocol compliance
QoreHttpClientObject::setConnectTimeout
DLLEXPORT void setConnectTimeout(int ms)
sets the connect timeout in ms
QoreHttpClientObject::post
DLLEXPORT AbstractQoreNode * post(const char *path, const QoreHashNode *headers, const void *data, unsigned size, QoreHashNode *info, ExceptionSink *xsink)
sends an HTTP "POST" message to the remote server and returns the message body of the response...
QoreHttpClientObject::setDefaultHeaderValue
DLLEXPORT void setDefaultHeaderValue(const char *header, const char *val)
sets the value of a default header to send with every outgoing message
QoreHttpClientObject::getNoDelay
DLLEXPORT bool getNoDelay() const
returns the value of the TCP_NODELAY flag on the object
QoreHttpClientObject::setUserPassword
DLLEXPORT void setUserPassword(const char *user, const char *pass)
sets the username and password for the connection
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:65
QoreHttpClientObject::setRedirectPassthru
DLLEXPORT bool setRedirectPassthru(bool set)
sets the new and returns the old redirect_passthru status
QoreHttpClientObject::addDefaultHeaders
DLLEXPORT void addDefaultHeaders(const QoreHashNode *hdr)
Sets the value of multiple headers to send with every outgoing message.
QoreHttpClientObject::setHTTPVersion
DLLEXPORT int setHTTPVersion(const char *version, ExceptionSink *xsink)
sets the http version from a string
QoreHttpClientObject::setMaxRedirects
DLLEXPORT void setMaxRedirects(int max)
sets the max_redirects option
QoreHttpClientObject::setEncoding
DLLEXPORT void setEncoding(const QoreEncoding *qe)
sets the default encoding for the object
QoreValue
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:267
QoreHttpClientObject::getEncoding
DLLEXPORT const QoreEncoding * getEncoding() const
returns the default encoding for the object
QoreHttpClientObject::disconnect
DLLEXPORT void disconnect()
disconnects from the remote server
QoreObject
the implementation of Qore&#39;s object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:60
ExceptionSink
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
QoreHttpClientObject
provides a way to communicate with HTTP servers using Qore data structures
Definition: QoreHttpClientObject.h:51
QoreHttpClientObject::setProxySecure
DLLEXPORT void setProxySecure(bool is_secure)
sets the SSL flag for use in the next connection to the proxy
QoreHttpClientObject::getAssumedEncoding
DLLEXPORT QoreStringNode * getAssumedEncoding() const
gets the assumed encoding
InputStream
Interface for private data of input streams.
Definition: InputStream.h:44
QoreHttpClientObject::getProxyURL
DLLEXPORT QoreStringNode * getProxyURL()
returns the proxy connection parameters as a URL (or 0 if there is none), caller owns the reference c...
QoreHttpClientObject::setNoDelay
DLLEXPORT int setNoDelay(bool nodelay)
sets the TCP_NODELAY flag on the object
int64
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
QoreHttpClientObject::isHTTP11
DLLEXPORT bool isHTTP11() const
returns true if HTTP 1.1 protocol compliance has been set
QoreHttpClientObject::getDefaultPath
DLLEXPORT const char * getDefaultPath() const
returns the default path or 0 if none is set
QoreHttpClientObject::isConnected
DLLEXPORT bool isConnected() const
returns the connection status of the object
QoreHttpClientObject::getRedirectPassthru
DLLEXPORT bool getRedirectPassthru() const
returns the current redirect_passthru status
ResolvedCallReferenceNode
base class for resolved call references
Definition: CallReferenceNode.h:109
QoreHttpClientObject::setSecure
DLLEXPORT void setSecure(bool is_secure)
sets the SSL flag for use in the next connection
common.h
QoreHttpClientObject::clearUserPassword
DLLEXPORT void clearUserPassword()
clears the username and password for the connection
QoreHttpClientObject::setEventQueue
DLLEXPORT void setEventQueue(Queue *cbq, ExceptionSink *xsink)
sets the event queue, must be already referenced before call
QoreHttpClientObject::getErrorPassthru
DLLEXPORT bool getErrorPassthru() const
returns the current error_passthru status
QoreHttpClientObject::setProxyUserPassword
DLLEXPORT void setProxyUserPassword(const char *user, const char *pass)
sets the username and password for the proxy connection
QoreHttpClientObject::getHostHeaderValue
DLLEXPORT QoreStringNode * getHostHeaderValue() const
returns the Host header value
QoreHttpClientObject::send
DLLEXPORT QoreHashNode * send(const char *meth, const char *path, const QoreHashNode *headers, const void *data, unsigned size, bool getbody, QoreHashNode *info, ExceptionSink *xsink)
sends a message to the remote server and returns the entire response as a hash, caller owns the QoreH...
QoreHttpClientObject::setConnectionPath
DLLEXPORT void setConnectionPath(const char *path)
sets or clears the connection path
QoreHttpClientObject::clearProxyURL
DLLEXPORT void clearProxyURL()
clears the proxy URL
QoreHttpClientObject::getMaxRedirects
DLLEXPORT int getMaxRedirects() const
returns the value of the max_redirects option