36 #ifndef MINIHTTPSOCKET_H 37 #define MINIHTTPSOCKET_H 40 #define MINIHTTP_SUPPORT_HTTP 41 #define MINIHTTP_SUPPORT_SOCKET_SET 58 namespace SimpleHTTPClient
99 bool SplitURI(
const std::string& uri, std::string& host, std::string& file,
int& port);
110 void 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)
238 : host(h), resource(res), port(80), user(u), useSSL(false) {}
266 return ExpectMoreData() || _requestQ.size();
276 bool Download(
const std::string& url,
const char *extraRequest =
NULL,
void *user =
NULL,
const POST *post =
NULL);
277 bool SendRequest(
Request& what,
bool enqueue);
278 bool SendRequest(
const std::string what,
const char *extraRequest =
NULL,
void *user =
NULL);
279 bool QueueRequest(
const std::string what,
const char *extraRequest =
NULL,
void *user =
NULL);
289 const char *Hdr(
const char *h)
const;
291 bool IsRedirecting()
const;
292 bool IsSuccess()
const;
298 virtual void _OnRecv(
void *buf,
unsigned int size);
305 bool _Redirect(std::string loc,
bool forceGET);
307 void _ProcessChunk();
308 bool _EnqueueOrSend(
const Request& req,
bool forceQueue =
false);
310 bool _OpenRequest(
const Request& req);
312 void _ParseHeaderFields(
const char *s,
size_t size);
313 bool _HandleStatus();
314 void _FinishRequest();
315 void _OnRecvInternal(
void *buf,
unsigned int size);
328 std::map<std::string, std::string>
_hdrs;
346 #ifdef MINIHTTP_SUPPORT_SOCKET_SET 360 void add(
TcpSocket *s,
bool deleteWhenDone =
true);
363 inline size_t size() {
return _store.size(); }
373 typedef std::map<TcpSocket*, SocketSetData>
Store;
virtual void _OnClose()
Definition: HttpClient.h:169
bool _inProgress
Definition: HttpClient.h:332
void SetBufsizeIn(unsigned int s)
Definition: HttpClient.cpp:457
bool SplitURI(const std::string &uri, std::string &protocol, std::string &host, std::string &file, int &port, bool &useSSL)
Definition: HttpClient.cpp:267
Main class for making a HTTP request to a HTTP(s) serverMake a request to a HTTP Server.
Definition: HttpClient.h:234
std::string _host
Definition: HttpClient.h:193
virtual bool HasPendingTask() const
Definition: HttpClient.h:144
unsigned int GetRemaining() const
Definition: HttpClient.h:281
Definition: Bitfield.h:34
bool update()
Definition: HttpClient.cpp:845
bool _nonblocking
Definition: HttpClient.h:185
SSLResult verifySSL()
Definition: HttpClient.cpp:731
Definition: HttpClient.h:123
Definition: HttpClient.h:127
virtual void _OnOpen()
Definition: HttpClient.h:170
a Socket that speaks HTTP protocol.Talk to a HTTP(s) server
Definition: HttpClient.h:257
void _ShiftBuffer()
Definition: HttpClient.cpp:811
long _s
Definition: HttpClient.h:190
unsigned int GetStatusCode() const
Definition: HttpClient.h:283
bool hasSSL() const
Definition: HttpClient.h:160
POST post
Definition: HttpClient.h:248
bool open(const char *addr=NULL, unsigned int port=0)
Definition: HttpClient.cpp:563
bool HasSSL()
Indicates if we support HTTPS requestsIndicates if we support HTTPS requests.
Definition: HttpClient.cpp:158
const std::string & str() const
Definition: HttpClient.h:221
std::string _user_agent
Definition: HttpClient.h:317
void SetFollowRedirect(bool follow)
Definition: HttpClient.h:272
std::string header
Definition: HttpClient.h:242
SSLResult
Result Codes for SSL operations.
Definition: HttpClient.h:116
virtual bool HasPendingTask() const
Definition: HttpClient.h:264
void SetAcceptEncoding(const std::string &s)
Definition: HttpClient.h:271
Definition: HttpClient.h:126
#define NULL
Definition: Defs.h:86
const char * c_str() const
Definition: HttpClient.h:220
Definition: HttpClient.h:125
Definition: HttpClient.h:367
bool _followRedir
Definition: HttpClient.h:335
bool InitNetwork()
Initialize the Network for HTTP requestsInitializes the Network for HTTP requests.
Definition: HttpClient.cpp:206
unsigned int _writeSize
Definition: HttpClient.h:180
char * _readptr
Definition: HttpClient.h:176
virtual void _OnData()
Definition: HttpClient.cpp:822
unsigned int _recvSize
Definition: HttpClient.h:181
std::queue< Request > _requestQ
Definition: HttpClient.h:327
size_t length() const
Definition: HttpClient.h:223
Definition: HttpClient.h:205
bool SetNonBlocking(bool nonblock)
Definition: HttpClient.cpp:448
Definition: HttpClient.h:118
TcpSocket()
Definition: HttpClient.cpp:381
unsigned int GetContentLen() const
Definition: HttpClient.h:284
Support Multiple TCP Socket connectionsto Support multiple TCP Socket Connections.
Definition: HttpClient.h:354
Request()
Definition: HttpClient.h:236
void StopNetwork()
Stop the Network for HTTP requestsStops the Network for HTTP requests and releases resources associat...
Definition: HttpClient.cpp:221
std::string _filename
Definition: HttpClient.h:337
Request(const std::string &h, const std::string &res, int p=80, void *u=NULL)
Definition: HttpClient.h:237
bool useSSL
Definition: HttpClient.h:247
Store _store
Definition: HttpClient.h:375
void SetAlwaysHandle(bool h)
Definition: HttpClient.h:273
void shutdownSSL()
Definition: HttpClient.cpp:716
bool _alwaysHandle
Definition: HttpClient.h:336
std::map< TcpSocket *, SocketSetData > Store
Definition: HttpClient.h:373
std::string _tmpHdr
Definition: HttpClient.h:319
bool isOpen(void)
Definition: HttpClient.cpp:406
Definition: HttpClient.h:122
a TCP Socket that can optionally be protected via SSLThis represents a TCP Socket that can be encrypt...
Definition: HttpClient.h:138
const Request & GetCurrentRequest() const
Definition: HttpClient.h:288
virtual void _OnCloseInternal()
Definition: HttpClient.cpp:441
This class is used for Posting data to a HTTP(s) serverPost some data to a HTTP(s) server...
Definition: HttpClient.h:215
Definition: HttpClient.h:120
Request _curRequest
Definition: HttpClient.h:330
const char * GetHost(void)
Definition: HttpClient.h:155
bool initSSL(const char *certs)
Definition: HttpClient.cpp:722
size_t size()
Definition: HttpClient.h:363
void SetDownloadFile(std::string filename)
Definition: HttpClient.h:274
char * _inbuf
Definition: HttpClient.h:175
Definition: HttpClient.h:119
virtual ~TcpSocket()
Definition: HttpClient.cpp:397
unsigned int GetBufSize()
Definition: HttpClient.h:154
unsigned int _keep_alive
Definition: HttpClient.h:321
void SetUserAgent(const std::string &s)
Definition: HttpClient.h:270
std::string _accept_encoding
Definition: HttpClient.h:318
unsigned int _status
Definition: HttpClient.h:325
std::string extraGetHeaders
Definition: HttpClient.h:244
virtual void _OnRequestDone()
Definition: HttpClient.h:303
unsigned int _contentLen
Definition: HttpClient.h:324
char * _writeptr
Definition: HttpClient.h:177
void URLEncode(const std::string &s, std::string &enc)
Encode a String suitable for sending as a URL request (eg Get)Encode a String so it can be sent as pa...
Definition: HttpClient.cpp:325
std::map< std::string, std::string > _hdrs
Definition: HttpClient.h:328
bool _chunkedTransfer
Definition: HttpClient.h:333
void close()
Definition: HttpClient.cpp:413
int port
Definition: HttpClient.h:245
bool deleteWhenDone
Definition: HttpClient.h:369
void * user
Definition: HttpClient.h:246
Definition: HttpClient.h:121
unsigned int _remaining
Definition: HttpClient.h:322
void reserve(size_t res)
Definition: HttpClient.h:218
HttpCode
Definition: HttpClient.h:203
bool _mustClose
Definition: HttpClient.h:334
void SetKeepAlive(unsigned int secs)
Definition: HttpClient.h:269
std::string host
Definition: HttpClient.h:241
bool ChunkedTransfer() const
Definition: HttpClient.h:285
Definition: HttpClient.h:124
unsigned int _inbufSize
Definition: HttpClient.h:179
unsigned int _lastport
Definition: HttpClient.h:183
virtual void _OnRecv(void *buf, unsigned int size)=0
Definition: HttpClient.h:206
std::string resource
Definition: HttpClient.h:243
FILE * _pFile
Definition: HttpClient.h:338
bool ExpectMoreData() const
Definition: HttpClient.h:286
bool SendBytes(const void *buf, unsigned int len)
Definition: HttpClient.cpp:739
virtual bool _OnUpdate()
Definition: HttpClient.h:171
std::string protocol
Definition: HttpClient.h:240
bool empty() const
Definition: HttpClient.h:222
Definition: HttpClient.h:129