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