1 #include <opkele/exception.h> 2 #include <opkele/curl.h> 3 4 #include "config.h" 5 6 namespace opkele { 7 8 namespace util { 9 ~curl_slist_t()10 curl_slist_t::~curl_slist_t() throw() { 11 if(_s) 12 curl_slist_free_all(_s); 13 } 14 operator =(curl_slist * s)15 curl_slist_t& curl_slist_t::operator=(curl_slist *s) { 16 if(_s) 17 curl_slist_free_all(_s); 18 _s = s; 19 return *this; 20 } 21 append(const char * str)22 void curl_slist_t::append(const char *str) { 23 curl_slist *s = curl_slist_append(_s,str); 24 if(!s) 25 throw opkele::exception(OPKELE_CP_ "failed to curl_slist_append()"); 26 _s=s; 27 } 28 ~curl_t()29 curl_t::~curl_t() throw() { 30 if(_c) 31 curl_easy_cleanup(_c); 32 } 33 operator =(CURL * c)34 curl_t& curl_t::operator=(CURL *c) { 35 if(_c) 36 curl_easy_cleanup(_c); 37 _c = c; 38 return *this; 39 } 40 misc_sets()41 CURLcode curl_t::misc_sets() { 42 assert(_c); 43 CURLcode r; 44 (r=easy_setopt(CURLOPT_FOLLOWLOCATION,1)) 45 || (r=easy_setopt(CURLOPT_MAXREDIRS,5)) 46 || (r=easy_setopt(CURLOPT_DNS_CACHE_TIMEOUT,120)) 47 || (r=easy_setopt(CURLOPT_DNS_USE_GLOBAL_CACHE,1)) 48 || (r=easy_setopt(CURLOPT_USERAGENT,PACKAGE_NAME "/" PACKAGE_SRC_VERSION)) 49 || (r=easy_setopt(CURLOPT_TIMEOUT,20)) 50 #ifdef DISABLE_CURL_SSL_VERIFYHOST 51 || (r=easy_setopt(CURLOPT_SSL_VERIFYHOST,0)) 52 #endif 53 #ifdef DISABLE_CURL_SSL_VERIFYPEER 54 || (r=easy_setopt(CURLOPT_SSL_VERIFYPEER,0)) 55 #endif 56 ; 57 return r; 58 } 59 _write(void * p,size_t s,size_t nm,void * stream)60 static size_t _write(void *p,size_t s,size_t nm,void *stream) { 61 return ((curl_t*)stream)->write(p,s,nm); 62 } 63 set_write()64 CURLcode curl_t::set_write() { 65 assert(_c); 66 CURLcode r; 67 (r = easy_setopt(CURLOPT_WRITEDATA,this)) 68 || (r = easy_setopt(CURLOPT_WRITEFUNCTION,_write)); 69 return r; 70 } 71 _progress(void * cp,double dlt,double dln,double ult,double uln)72 static int _progress(void *cp,double dlt,double dln,double ult,double uln) { 73 return ((curl_t*)cp)->progress(dlt,dln,ult,uln); 74 } 75 set_progress()76 CURLcode curl_t::set_progress() { 77 assert(_c); 78 CURLcode r; 79 (r = easy_setopt(CURLOPT_PROGRESSDATA,this)) 80 || (r = easy_setopt(CURLOPT_PROGRESSFUNCTION,_progress)) 81 || (r = easy_setopt(CURLOPT_NOPROGRESS,0)); 82 return r; 83 } 84 _header(void * p,size_t s,size_t nm,void * stream)85 static size_t _header(void *p,size_t s,size_t nm,void *stream) { 86 return ((curl_t*)stream)->header(p,s,nm); 87 } 88 set_header()89 CURLcode curl_t::set_header() { 90 assert(_c); 91 CURLcode r; 92 (r = easy_setopt(CURLOPT_HEADERDATA,this)) 93 || (r=easy_setopt(CURLOPT_HEADERFUNCTION,_header)); 94 return r; 95 } 96 97 } 98 99 } 100