Barracuda Application Server C/C++ Reference
NO
HttpClient.h
1/*
2 * ____ _________ __ _
3 * / __ \___ ____ _/ /_ __(_)___ ___ ___ / / ____ ____ _(_)____
4 * / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ / / __ \/ __ `/ / ___/
5 * / _, _/ __/ /_/ / / / / / / / / / / / __/ /___/ /_/ / /_/ / / /__
6 * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/
7 * /____/
8 *
9 * Barracuda Application Server
10 *
11 ****************************************************************************
12 * HEADER
13 *
14 * $Id: HttpClient.h 5813 2026-06-15 10:15:50Z wini $
15 *
16 * COPYRIGHT: Real Time Logic LLC, 2009-2020
17 *
18 * This software is copyrighted by and is the sole property of Real
19 * Time Logic LLC. All rights, title, ownership, or other interests in
20 * the software remain the property of Real Time Logic LLC. This
21 * software may only be used in accordance with the terms and
22 * conditions stipulated in the corresponding license agreement under
23 * which the software has been supplied. Any unauthorized use,
24 * duplication, transmission, distribution, or disclosure of this
25 * software is expressly forbidden.
26 *
27 * This Copyright notice may not be removed or modified without prior
28 * written consent of Real Time Logic LLC.
29 *
30 * Real Time Logic LLC. reserves the right to modify this software
31 * without notice.
32 *
33 * http://www.realtimelogic.com
34 ****************************************************************************
35 */
36#ifndef __HttpClient_h
37#define __HttpClient_h
38
39#include <DynBuffer.h>
40#ifndef NO_SHARKSSL
41#include <SharkSslEx.h>
42#endif
43
44struct HttpClient;
45
46
87typedef struct HttpClientKeyVal
88{
89 const char* key;
90 const char* val;
92
93
94
97typedef struct
98{
99#ifdef __cplusplus
102 const char* getKey(HttpClient* c);
105 const char* getVal(HttpClient* c);
106#endif
107 U16 key;
108 U16 val;
110
111#define HttpClientHeader_key(c,o) ((c)->db.super.buf + (o)->key)
112#define HttpClientHeader_val(c,o) ((c)->db.super.buf + (o)->val)
113
114
115#define HTTP_CLIENT_MAX_HEADERS 64
116
117#define HttpClient_SocksProxy 1
118#define HttpClient_ProxyConnect 2
119#define HttpClient_Persistent 4
120#define HttpClient_IPv6 8
121/* Reserved for future use */
122#define HttpClient_NoHostHeader 16
123#define HttpClient_NotUsed2 32
124/* May be set by code using the HttpClient lib */
125#define HttpClient_UserDef1 64
126#define HttpClient_UserDef2 128
127
128
187typedef struct HttpClient
188#ifdef __cplusplus
189: public SoDispCon
190{
223 HttpClient(SoDisp* disp, U8 mode=HttpClient_Persistent);
224
226 ~HttpClient();
227
239 void setSSL(SharkSsl* ssl);
240
244 void setReadTmo(BaTime timeout);
245
247 static int isURL(const char* url);
248
254 SharkSslConTrust trusted(void);
255
264 void setAcceptTrusted(bool acceptTrusted);
265
293 int request(HttpMethod methodType,
294 const char* url,
295 const char* userPass=0,
296 const HttpClientKeyVal* query=0,
297 const HttpClientKeyVal* headers=0,
298 BaFileSize size=0);
299
310 int sendData(const void* data, int len);
311
313 int getBufSize();
314
319 int readData(void* buf, int bufSize);
320
325 const char* getHeaderValue(const char* name);
326
338 HttpClientHeader* getHeaders(int* hlen);
339
342 void close();
343
347 int getStatus();
348
353 int getError();
354
357 SharkSslCon* getSharkSslCon();
358
361#else
362{
363 SoDispCon super;
364#endif
365 DynBuffer db;
366 HttpClientHeader headers[HTTP_CLIENT_MAX_HEADERS];
367
368 struct SharkSsl* sharkSslClient; /* optional SSL client */
369
370 /* Variable proxyPortNo and the following 3 variables must be
371 * set and managed by the user of this class.
372 */
373 const char* proxy; /* Proxy name/IP addr, if any */
374 const char* proxyUserPass; /* Format: "user:password" */
375 const char* intfName; /* If 0: bind to any intf, or bind to intfName */
376
377 char* data; /* Pointer to start of payload data */
378 char* host; /* Server host name */
379 BaFileSize size; /* Send or receive data size */
380 BaTime readTmo; /* Default read timeout is 20 seconds */
381 int chunkSize;
382 int lastError;
383 int portNo; /* host port number */
384 U16 proxyPortNo; /* host port number */
385 U16 headerLen;
386 S16 httpStatus;
387 BaBool chunkEncoding;
388 BaBool respManaged; /* Func HttpClient_manageEndOfRequest */
389 BaBool closeCon;
390 BaBool acceptTrusted; /* Accept only trusted connections */
391 /*
392 HttpClient_SocksProxy
393 HttpClient_Persistent
394 HttpClient_IPv6
395 */
396 U8 mode;
397 U8 methodType;
399
400#ifdef __cplusplus
401extern "C" {
402#endif
403
404void HttpClient_constructor(HttpClient* o, SoDisp* disp, U8 mode);
405#define HttpClient_setSSL(o, ssl) (o)->sharkSslClient=ssl
406#define HttpClient_setReadTmo(o, timeout) (o)->readTmo=timeout
407#ifndef NO_SHARKSSL
408SharkSslCon* HttpClient_getSharkSslCon(HttpClient* o);
409#endif
410
411void HttpClient_destructor(HttpClient* o);
412int HttpClient_isURL(const char* url);
413int HttpClient_request(HttpClient* o,
414 HttpMethod methodType,
415 const char* url,
416 const char* userPass,
417 const HttpClientKeyVal* params,
418 const HttpClientKeyVal* headers,
419 BaFileSize size);
420
421int HttpClient_sendData(HttpClient* o, const void* data, int len);
422int HttpClient_getBufSize(HttpClient* o);
423int HttpClient_readDataBuffered(HttpClient* o, void* buf, int bufSize);
424int HttpClient_readData(HttpClient* o, void* buf, int bufSize);
425const char* HttpClient_getHeaderValue(HttpClient* o, const char* name);
426HttpClientHeader* HttpClient_getHeaders(HttpClient* o, int* hlen);
427void HttpClient_close(HttpClient* o);
428int HttpClient_getStatus(HttpClient* o);
429#define HttpClient_getError(o) (o)->lastError
430#define HttpClient_getSoDispCon(o) ((SoDispCon*)(o))
431#ifndef NO_SHARKSSL
432SharkSslConTrust HttpClient_trusted(HttpClient* o);
433#endif
434#define HttpClient_setAcceptTrusted(o, t) (o)->acceptTrusted=t
435
436#ifdef __cplusplus
437}
438
439inline HttpClient::HttpClient(SoDisp* disp, U8 mode) {
440 HttpClient_constructor(this,disp, mode);
441}
442
444 HttpClient_destructor(this);
445}
446
447inline void HttpClient::setSSL(SharkSsl* ssl) {
448 HttpClient_setSSL(this,ssl);
449}
450
451inline void HttpClient::setReadTmo(BaTime timeout) {
452 HttpClient_setReadTmo(this,timeout);
453}
454
455inline int HttpClient::isURL(const char* url) {
456 return HttpClient_isURL(url);
457}
458
459
460inline SharkSslConTrust HttpClient::trusted(void){
461 return HttpClient_trusted(this);
462}
463
464inline void HttpClient::setAcceptTrusted(bool t) {
465 HttpClient_setAcceptTrusted(this, t?TRUE:FALSE);
466}
467
468
469inline SharkSslCon* HttpClient::getSharkSslCon() {
470 return HttpClient_getSharkSslCon(this);
471}
472
473
474inline int HttpClient::request(HttpMethod methodType,
475 const char* url,
476 const char* userPass,
477 const HttpClientKeyVal* params,
478 const HttpClientKeyVal* headers,
479 BaFileSize size)
480{
481 return HttpClient_request(this,methodType,url,userPass,params,headers,size);
482}
483
484inline int HttpClient::sendData(const void* data, int len) {
485 return HttpClient_sendData(this, data, len);
486}
487
489 return HttpClient_getBufSize(this);
490}
491
492inline int HttpClient::readData(void* buf, int bufSize) {
493 return HttpClient_readData(this, buf, bufSize);
494}
495
496inline const char* HttpClient::getHeaderValue(const char* name) {
497 return HttpClient_getHeaderValue(this, name);
498}
499
501 return HttpClient_getHeaders(this, hlen);
502}
503
504inline void HttpClient::close() {
505 HttpClient_close(this);
506}
507
509 return HttpClient_getStatus(this);
510}
511
512
514 return HttpClient_getError(this);
515}
516
518 return HttpClient_getSoDispCon(this);
519}
520
521inline const char* HttpClientHeader::getKey(HttpClient* c) {
522 return c->db.buf + key;
523}
524inline const char* HttpClientHeader::getVal(HttpClient* c) {
525 return c->db.buf + val;
526}
527#endif
528 /* End group HttpClient */
530
531
532#endif
static int isURL(const char *url)
Returns true if the URL is valid.
Definition: HttpClient.h:455
int readData(void *buf, int bufSize)
Read HTTP response data.
Definition: HttpClient.h:492
void setSSL(SharkSsl *ssl)
Set the SharkSSL client object to enable https: URL's.
Definition: HttpClient.h:447
SoDispCon * getSoDispCon()
Returns the underlying dispatcher connection object.
Definition: HttpClient.h:517
~HttpClient()
Terminate the HttpClient.
Definition: HttpClient.h:443
void close()
Close a persistent HTTP 1.1 connection.
Definition: HttpClient.h:504
HttpClientHeader * getHeaders(int *hlen)
Returns all HTTP response headers.
Definition: HttpClient.h:500
int sendData(const void *data, int len)
Send data to the server.
Definition: HttpClient.h:484
int getBufSize()
Returns the size of the internal response buffer.
Definition: HttpClient.h:488
int request(HttpMethod methodType, const char *url, const char *userPass=0, const HttpClientKeyVal *query=0, const HttpClientKeyVal *headers=0, BaFileSize size=0)
Send an HTTP request.
Definition: HttpClient.h:474
const char * getHeaderValue(const char *name)
Returns the value for the header 'name' or NULL if the header is not in the response.
Definition: HttpClient.h:496
SharkSslCon * getSharkSslCon()
Wrapper for SoDispCon::getSharkSslCon.
Definition: HttpClient.h:469
int getError()
Returns the last socket error code if any.
Definition: HttpClient.h:513
const char * getVal(HttpClient *c)
Returns the value.
Definition: HttpClient.h:524
int getStatus()
Returns the server's HTTP response code or a negative value on socket errors.
Definition: HttpClient.h:508
void setReadTmo(BaTime timeout)
Set the read timeout (in milliseconds).
Definition: HttpClient.h:451
const char * getKey(HttpClient *c)
Returns the key.
Definition: HttpClient.h:521
SharkSslConTrust trusted(void)
Returns the peer's "trust" status.
Definition: HttpClient.h:460
struct HttpClientKeyVal HttpClientKeyVal
A container for key/value pairs used when setting custom HTTP headers or URL encoded HTTP parameters.
void setAcceptTrusted(bool acceptTrusted)
Force method HttpClient::request to accept only trusted connections when connecting to a server.
Definition: HttpClient.h:464
HttpClient(SoDisp *disp, U8 mode=HttpClient_Persistent)
Create a HttpClient instance.
Definition: HttpClient.h:439
HttpMethod
HTTP method types.
Definition: HttpServer.h:780
S64 BaTime
An arithmetic type representing calendar time with epoch of 1970-01-01 00:00:10 GMT – i....
Definition: GenPrimT.h:93
A dynamic buffer.
Definition: DynBuffer.h:60
The response HTTP headers returned by HttpClient::getHeaders.
Definition: HttpClient.h:98
A container for key/value pairs used when setting custom HTTP headers or URL encoded HTTP parameters.
Definition: HttpClient.h:88
The HTTP(S) "C" client library implementation conforms to the HTTP/1.1 standard, RFC 2616.
Definition: HttpClient.h:190
Contains information about the physical socket connection.
Definition: SoDispCon.h:112
The SoDisp dispatches any socket connection that contains data by calling the SoDispCon::execute memb...
Definition: SoDisp.h:86