黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

第二人生的源碼分析(六十二)類Easy實現多協議文

系統 2226 0
從上一節里可以看到,在類 LLCurl聲明里主要聲明嵌套類Easy,最后通過嵌套類Easy來實現libcurl功能,下面就來仔細地分析它。它的類聲明如下:
#001?class LLCurl::Easy
#002?{
#003? ?? LOG_CLASS(Easy);
#004?
#005?private:
#006? ?? Easy();
#007? ??
#008?public:
?
用工廠模式來創建類實例。
#009? ?? static Easy* getEasy();
#010? ?? ~Easy();
#011?
?
返回當前 libcurl庫的句柄。
#012? ?? CURL* getCurlHandle() const { return mCurlEasyHandle; }
#013?
?
設置錯誤緩沖區。
#014? ?? void setErrorBuffer();
?
設置授權認證。
#015? ?? void setCA();
#016? ??
?
調用庫的函數 curl_easy_setopt。
#017? ?? void setopt(CURLoption option, S32 value);
#018? ?? // These assume the setter does not free value!
#019? ?? void setopt(CURLoption option, void* value);
#020? ?? void setopt(CURLoption option, char* value);
#021? ?? // Copies the string so that it is gauranteed to stick around
#022? ?? void setoptString(CURLoption option, const std::string& value);
#023? ??
?
調用庫函數 curl_slist_append來添加到列表頭里面。
#024? ?? void slist_append(const char* str);
?
設置 HTTP協議頭數據。
#025? ?? void setHeaders();
#026? ??
?
報告錯誤信息。
#027? ?? U32 report(CURLcode);
?
獲取傳送信息。
#028? ?? void getTransferInfo(LLCurl::TransferInfo* info);
#029?
?
在使用庫下載數據前的設置。
#030? ?? void prepRequest(const std::string& url, ResponderPtr, bool post = false);
#031? ??
#032? ?? const char* getErrorBuffer();
#033?
?
獲取輸入流對象。
#034? ?? std::stringstream& getInput() { return mInput; }
?
獲取輸出協議頭流對象。
#035? ?? std::stringstream& getHeaderOutput() { return mHeaderOutput; }
?
獲取輸出流對象。
#036? ?? LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
#037? ?? const LLChannelDescriptors& getChannels() { return mChannels; }
#038? ??
?
清空所有流對象和一些狀態。
#039? ?? void resetState();
#040?
#041?private: ??
#042? ?? CURL*?????????????? mCurlEasyHandle;
#043? ?? struct curl_slist*?mHeaders;
#044? ??
#045? ?? std::stringstream?? mRequest;
#046? ?? LLChannelDescriptors mChannels;
#047? ?? LLIOPipe::buffer_ptr_t mOutput;
#048? ?? std::stringstream?? mInput;
#049? ?? std::stringstream?? mHeaderOutput;
#050? ?? char??????????????? mErrorBuffer[CURL_ERROR_SIZE];
#051?
#052? ?? // Note: char*'s not strings since we pass pointers to curl
#053? ?? std::vector<char*>?mStrings;
#054? ??
#055? ?? ResponderPtr??????? mResponder;
#056?};
?
上面的類Easy封裝了函數curl_easy_init來初始化一個協議實例,函數curl_easy_cleanup來刪除相應的實例,函數curl_easy_reset來復位相關狀態,通過函數curl_easy_getinfo來獲取信息。最后通過函數curl_easy_setopt來設置不同的參數,這樣才實現libcurl庫的功能調用。

第二人生的源碼分析(六十二)類Easy實現多協議文件傳送


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論