#ifndef _HTTPS_CLIENT_ #define _HTTPS_CLIENT_ #include #include #include #include #include #include #include #include "AutoSocket.h" #include "utils.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 mHeader; boost::asio::streambuf mResponse; std::string mBody; const unsigned short mPort; int mResponseMax; int mStatus; FUNCTION_TYPE mBuild; FUNCTION_TYPE 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); void handleResolve(const boost::system::error_code& ecResult, boost::asio::ip::tcp::resolver::iterator endpoint_iterator); void handleConnect(const boost::system::error_code& ecResult); void handleRequest(const boost::system::error_code& ecResult); void handleWrite(const boost::system::error_code& ecResult, std::size_t bytes_transferred); void handleHeader(const boost::system::error_code& ecResult, std::size_t bytes_transferred); void handleData(const boost::system::error_code& ecResult, std::size_t bytes_transferred); void handleShutdown(const boost::system::error_code& ecResult); 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, FUNCTION_TYPE build, boost::posix_time::time_duration timeout, FUNCTION_TYPE complete); void httpsGet( bool bSSL, std::deque deqSites, const std::string& strPath, boost::posix_time::time_duration timeout, FUNCTION_TYPE 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, FUNCTION_TYPE 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, FUNCTION_TYPE complete); static void httpsRequest( bool bSSL, boost::asio::io_service& io_service, std::string strSite, const unsigned short port, FUNCTION_TYPE build, std::size_t responseMax, boost::posix_time::time_duration timeout, FUNCTION_TYPE complete); static void sendSMS(boost::asio::io_service& io_service, const std::string& strText); }; #endif // vim:ts=4