通过上面介绍了
libcurl库的功能,那么在第二人生里到底是怎么样使用它的呢?又是怎么样封装它,才会更好用呢?下面就来分析一下它的类声明:
#001 // For whatever reason, this is not typedef'd in curl.h
#002 typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream);
#003
#004 class LLCurl
#005 {
定义
LOG类型信息。
#006
LOG_CLASS(LLCurl);
#007
#008 public:
声明两个嵌套类。
#009
class Easy;
#010
class Multi;
#011
声明传送数据信息的结构。
#012
struct TransferInfo
#013
{
#014
TransferInfo() : mSizeDownload(0.0), mTotalTime(0.0), mSpeedDownload(0.0) {}
#015
F64 mSizeDownload;
#016
F64 mTotalTime;
#017
F64 mSpeedDownload;
#018
};
#019
下面是定义数据响应类。
#020
class Responder
#021
{
#022
//LOG_CLASS(Responder);
#023
public:
#024
#025
Responder();
#026
virtual ~Responder();
#027
#028
/**
#029
* @brief return true if the status code indicates success.
#030
*/
#031
static bool isGoodStatus(U32 status)
#032
{
#033
return((200 <= status) && (status < 300));
#034
}
#035
#036
virtual void error(U32 status, const std::string& reason);
#037
// called with non-200 status codes
#038
#039
virtual void result(const LLSD& content);
#040
#041
// Override point for clients that may want to use this class when the response is some other format besides LLSD
#042
virtual void completedRaw(U32 status, const std::string& reason,
#043
const LLChannelDescriptors& channels,
#044
const LLIOPipe::buffer_ptr_t& buffer);
#045
#046
virtual void completed(U32 status, const std::string& reason, const LLSD& content);
#047
/**< The default implemetnation calls
#048
either:
#049
* result(), or
#050
* error()
#051
*/
#052
#053
// Override to handle parsing of the header only. Note: this is the only place where the contents
#054
// of the header can be parsed. In the ::completed call above only the body is contained in the LLSD.
#055
virtual void completedHeader(U32 status, const std::string& reason, const LLSD& content);
#056
#057
public: /* but not really -- don't touch this */
#058
U32 mReferenceCount;
#059
};
#060
typedef boost::intrusive_ptr<Responder> ResponderPtr;
#061
#062
下面函数设置
HTTPS授权认证文件。
#063
/**
#064
* @ brief Set certificate authority file used to verify HTTPS certs.
#065
*/
#066
static void setCAFile(const std::string& file);
#067
下面函数设置
HTTPS授权认证的路径。
#068
/**
#069
* @ brief Set certificate authority path used to verify HTTPS certs.
#070
*/
#071
static void setCAPath(const std::string& path);
#072
下面函数获取
HTTPS授权认证文件。
#073
/**
#074
* @ brief Get certificate authority file used to verify HTTPS certs.
#075
*/
#076
static const std::string& getCAFile() { return sCAFile; }
#077
下面函数获取
HTTPS授权文件路径。
#078
/**
#079
* @ brief Get certificate authority path used to verify HTTPS certs.
#080
*/
#081
static const std::string& getCAPath() { return sCAPath; }
#082
下面函数初始化
LLCurl类。
#083
/**
#084
* @ brief Initialize LLCurl class
#085
*/
#086
static void initClass();
#087
下面函数清除
LLCurl类。
#088
/**
#089
* @ brief Cleanup LLCurl class
#090
*/
#091
static void cleanupClass();
#092
获取类
LLCurl的出错码字符串。
#093
/**
#094
* @ brief curl error code -> string
#095
*/
#096
static std::string strerror(CURLcode errorcode);
#097
设置
SSL回调函数。
#098
// For OpenSSL callbacks
#099
static std::vector<LLMutex*> sSSLMutex;
#100
#101
// OpenSSL callbacks
#102
static void LLCurl::ssl_locking_callback(int mode, int type, const char *file, int line);
#103
static unsigned long LLCurl::ssl_thread_id(void);
#104
#105
#106
#107 private:
#108
#109
static std::string sCAPath;
#110
static std::string sCAFile;
#111 };
上面就定义
LLCurl类,声明了两个重要的嵌套类Easy和Multi,在类Easy里会封装libcurl基本的功能,下一次再仔细地分析它。