#ifndef _HTTPS_CLIENT_ #define _HTTPS_CLIENT_ #include #include #include #include #include #include #include #include #include "AutoSocket.h" // // Async https client. // class HttpsClient : public boost::enable_shared_from_this { private: typedef boost::shared_ptr pointer; bool mSSL; AutoSocket mSocket; boost::asio::ip::tcp::resolver mResolver; boost::shared_ptr mQuery; boost::asio::streambuf mRequest; boost::asio::streambuf mResponse; const unsigned short mPort; boost::function mBuild; boost::function mComplete; boost::asio::deadline_timer mDeadline; // If not success, we are shutting down. boost::system::error_code mShutdown; std::deque mDeqSites; boost::posix_time::time_duration mTimeout; void handleDeadline(const boost::system::error_code& ecResult); static void ShandleDeadline(pointer This, const boost::system::error_code& ecResult) { This->handleDeadline(ecResult); } void handleResolve(const boost::system::error_code& ecResult, boost::asio::ip::tcp::resolver::iterator endpoint_iterator); static void ShandleResolve(pointer This, const boost::system::error_code& ecResult, boost::asio::ip::tcp::resolver::iterator endpoint_iterator) { This->handleResolve(ecResult, endpoint_iterator); } void handleConnect(const boost::system::error_code& ecResult); static void ShandleConnect(pointer This, const boost::system::error_code& ecResult) { This->handleConnect(ecResult); } void handleRequest(const boost::system::error_code& ecResult); static void ShandleRequest(pointer This, const boost::system::error_code& ecResult) { This->handleRequest(ecResult); } void handleWrite(const boost::system::error_code& ecResult); static void ShandleWrite(pointer This, const boost::system::error_code& ecResult) { This->handleWrite(ecResult); } void handleData(const boost::system::error_code& ecResult); static void ShandleData(pointer This, const boost::system::error_code& ecResult) { This->handleData(ecResult); } void handleShutdown(const boost::system::error_code& ecResult); void parseData(); void httpsNext(); void invokeComplete(const boost::system::error_code& ecResult, int iStatus = 0, const std::string& strData = ""); void makeGet(const std::string& strPath, boost::asio::streambuf& sb, const std::string& strHost); public: HttpsClient( boost::asio::io_service& io_service, const unsigned short port, std::size_t responseMax ); void httpsRequest( bool bSSL, std::deque deqSites, boost::function build, boost::posix_time::time_duration timeout, boost::function complete); void httpsGet( bool bSSL, std::deque deqSites, const std::string& strPath, boost::posix_time::time_duration timeout, boost::function complete); static void httpsGet( bool bSSL, boost::asio::io_service& io_service, std::deque deqSites, const unsigned short port, const std::string& strPath, std::size_t responseMax, boost::posix_time::time_duration timeout, boost::function complete); static void httpsGet( bool bSSL, boost::asio::io_service& io_service, std::string strSite, const unsigned short port, const std::string& strPath, std::size_t responseMax, boost::posix_time::time_duration timeout, boost::function complete); static void httpsRequest( bool bSSL, boost::asio::io_service& io_service, std::string strSite, const unsigned short port, boost::function build, std::size_t responseMax, boost::posix_time::time_duration timeout, boost::function complete); }; #endif // vim:ts=4