36#ifndef MINIHTTPSOCKET_H
37#define MINIHTTPSOCKET_H
40#define MINIHTTP_SUPPORT_HTTP
41#define MINIHTTP_SUPPORT_SOCKET_SET
58namespace SimpleHTTPClient
99bool SplitURI(
const std::string& uri, std::string& host, std::string& file,
int& port);
110void URLEncode(
const std::string& s, std::string& enc);
146 bool open(
const char *addr =
NULL,
unsigned int port = 0);
156 bool SendBytes(
const void *buf,
unsigned int len);
159 bool initSSL(
const char *certs);
160 bool hasSSL()
const {
return !!_sslctx; }
168 virtual void _OnRecv(
void *buf,
unsigned int size) = 0;
196 int _writeBytes(
const unsigned char *buf,
size_t len);
197 int _readBytes(
unsigned char *buf,
size_t maxlen);
201#ifdef MINIHTTP_SUPPORT_HTTP
218 void reserve(
size_t res) { data.reserve(res); }
219 POST&
add(
const char *key,
const char *value);
220 const char *
c_str()
const {
return data.c_str(); }
221 const std::string&
str()
const {
return data; }
222 bool empty()
const {
return data.empty(); }
223 size_t length()
const {
return data.length(); }
237 Request(
const std::string& h,
const std::string& res,
int p = 80,
void *u =
NULL)
289 const char *
Hdr(
const char *h)
const;
298 virtual void _OnRecv(
void *buf,
unsigned int size);
328 std::map<std::string, std::string>
_hdrs;
346#ifdef MINIHTTP_SUPPORT_SOCKET_SET
373 typedef std::map<TcpSocket*, SocketSetData>
Store;
#define NULL
Definition Defs.h:85
a Socket that speaks HTTP protocol.
Definition HttpClient.h:258
bool SendRequest(const std::string what, const char *extraRequest=NULL, void *user=NULL)
Request _curRequest
Definition HttpClient.h:330
bool SendRequest(Request &what, bool enqueue)
void SetKeepAlive(unsigned int secs)
Definition HttpClient.h:269
bool QueueRequest(const std::string what, const char *extraRequest=NULL, void *user=NULL)
bool _chunkedTransfer
Definition HttpClient.h:333
FILE * _pFile
Definition HttpClient.h:338
std::string _accept_encoding
Definition HttpClient.h:318
void _OnRecvInternal(void *buf, unsigned int size)
bool _followRedir
Definition HttpClient.h:335
bool _alwaysHandle
Definition HttpClient.h:336
void SetUserAgent(const std::string &s)
Definition HttpClient.h:270
bool _inProgress
Definition HttpClient.h:332
bool _mustClose
Definition HttpClient.h:334
bool ExpectMoreData() const
Definition HttpClient.h:286
unsigned int _keep_alive
Definition HttpClient.h:321
bool _OpenRequest(const Request &req)
bool Download(const std::string &url, const char *extraRequest=NULL, void *user=NULL, const POST *post=NULL)
void SetAcceptEncoding(const std::string &s)
Definition HttpClient.h:271
bool ChunkedTransfer() const
Definition HttpClient.h:285
unsigned int GetContentLen() const
Definition HttpClient.h:284
void SetFollowRedirect(bool follow)
Definition HttpClient.h:272
unsigned int _contentLen
Definition HttpClient.h:324
std::map< std::string, std::string > _hdrs
Definition HttpClient.h:328
virtual void _OnCloseInternal()
void SetDownloadFile(std::string filename)
Definition HttpClient.h:274
std::string _filename
Definition HttpClient.h:337
virtual void _OnRecv(void *buf, unsigned int size)
unsigned int GetRemaining() const
Definition HttpClient.h:281
virtual bool HasPendingTask() const
Definition HttpClient.h:264
virtual void _OnRequestDone()
Definition HttpClient.h:303
unsigned int _status
Definition HttpClient.h:325
void SetAlwaysHandle(bool h)
Definition HttpClient.h:273
bool _Redirect(std::string loc, bool forceGET)
std::queue< Request > _requestQ
Definition HttpClient.h:327
unsigned int _remaining
Definition HttpClient.h:322
void _ParseHeaderFields(const char *s, size_t size)
bool _EnqueueOrSend(const Request &req, bool forceQueue=false)
std::string _tmpHdr
Definition HttpClient.h:319
const Request & GetCurrentRequest() const
Definition HttpClient.h:288
const char * Hdr(const char *h) const
unsigned int GetStatusCode() const
Definition HttpClient.h:283
std::string _user_agent
Definition HttpClient.h:317
bool IsRedirecting() const
This class is used for Posting data to a HTTP(s) server.
Definition HttpClient.h:216
size_t length() const
Definition HttpClient.h:223
const std::string & str() const
Definition HttpClient.h:221
const char * c_str() const
Definition HttpClient.h:220
void reserve(size_t res)
Definition HttpClient.h:218
bool empty() const
Definition HttpClient.h:222
POST & add(const char *key, const char *value)
Support Multiple TCP Socket connections.
Definition HttpClient.h:355
size_t size()
Definition HttpClient.h:363
std::map< TcpSocket *, SocketSetData > Store
Definition HttpClient.h:373
void remove(TcpSocket *s)
Store _store
Definition HttpClient.h:375
void add(TcpSocket *s, bool deleteWhenDone=true)
a TCP Socket that can optionally be protected via SSL
Definition HttpClient.h:139
SSLResult verifySSL()
Definition HttpClient.cpp:739
unsigned int _writeSize
Definition HttpClient.h:180
std::string _host
Definition HttpClient.h:193
bool isOpen(void)
Definition HttpClient.cpp:414
unsigned int GetBufSize()
Definition HttpClient.h:154
unsigned int _inbufSize
Definition HttpClient.h:179
void close()
Definition HttpClient.cpp:421
char * _writeptr
Definition HttpClient.h:177
bool SetNonBlocking(bool nonblock)
Definition HttpClient.cpp:456
void SetBufsizeIn(unsigned int s)
Definition HttpClient.cpp:465
char * _inbuf
Definition HttpClient.h:175
long _s
Definition HttpClient.h:190
bool SendBytes(const void *buf, unsigned int len)
Definition HttpClient.cpp:747
bool update()
Definition HttpClient.cpp:853
virtual void _OnOpen()
Definition HttpClient.h:170
virtual bool _OnUpdate()
Definition HttpClient.h:171
virtual void _OnCloseInternal()
Definition HttpClient.cpp:449
virtual bool HasPendingTask() const
Definition HttpClient.h:144
void shutdownSSL()
Definition HttpClient.cpp:724
bool _nonblocking
Definition HttpClient.h:185
unsigned int _lastport
Definition HttpClient.h:183
virtual ~TcpSocket()
Definition HttpClient.cpp:405
bool open(const char *addr=NULL, unsigned int port=0)
Definition HttpClient.cpp:571
bool initSSL(const char *certs)
Definition HttpClient.cpp:730
virtual void _OnRecv(void *buf, unsigned int size)=0
virtual void _OnClose()
Definition HttpClient.h:169
unsigned int _recvSize
Definition HttpClient.h:181
bool hasSSL() const
Definition HttpClient.h:160
TcpSocket()
Definition HttpClient.cpp:389
virtual void _OnData()
Definition HttpClient.cpp:830
void _ShiftBuffer()
Definition HttpClient.cpp:819
const char * GetHost(void)
Definition HttpClient.h:155
char * _readptr
Definition HttpClient.h:176
SSLResult
Result Codes for SSL operations.
Definition HttpClient.h:117
bool InitNetwork()
Initialize the Network for HTTP requests.
Definition HttpClient.cpp:214
bool HasSSL()
Indicates if we support HTTPS requests.
Definition HttpClient.cpp:166
void URLEncode(const std::string &s, std::string &enc)
Encode a String suitable for sending as a URL request (eg Get)
Definition HttpClient.cpp:333
void StopNetwork()
Stop the Network for HTTP requests.
Definition HttpClient.cpp:229
@ SSLR_CERT_SKIP_VERIFY
Definition HttpClient.h:126
@ SSLR_CERT_FUTURE
Definition HttpClient.h:127
@ SSLR_CERT_REVOKED
Definition HttpClient.h:122
@ SSLR_CERT_EXPIRED
Definition HttpClient.h:121
@ SSLR_CERT_NOT_TRUSTED
Definition HttpClient.h:124
@ SSLR_OK
Definition HttpClient.h:118
@ SSLR_CERT_CN_MISMATCH
Definition HttpClient.h:123
@ SSLR_FAIL
Definition HttpClient.h:120
@ SSLR_CERT_MISSING
Definition HttpClient.h:125
@ SSLR_NO_SSL
Definition HttpClient.h:119
@ _SSLR_FORCE32BIT
Definition HttpClient.h:129
bool SplitURI(const std::string &uri, std::string &protocol, std::string &host, std::string &file, int &port, bool &useSSL)
Definition HttpClient.cpp:275
HttpCode
Definition HttpClient.h:204
@ HTTP_NOTFOUND
Definition HttpClient.h:206
@ HTTP_OK
Definition HttpClient.h:205
Main class for making a HTTP request to a HTTP(s) server.
Definition HttpClient.h:235
int port
Definition HttpClient.h:245
void * user
Definition HttpClient.h:246
std::string extraGetHeaders
Definition HttpClient.h:244
std::string resource
Definition HttpClient.h:243
POST post
Definition HttpClient.h:248
std::string host
Definition HttpClient.h:241
std::string header
Definition HttpClient.h:242
Request()
Definition HttpClient.h:236
Request(const std::string &h, const std::string &res, int p=80, void *u=NULL)
Definition HttpClient.h:237
std::string protocol
Definition HttpClient.h:240
bool useSSL
Definition HttpClient.h:247
Definition HttpClient.h:368
bool deleteWhenDone
Definition HttpClient.h:369