summaryrefslogtreecommitdiffabout
path: root/include/opkele/curl.h
Unidiff
Diffstat (limited to 'include/opkele/curl.h') (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/curl.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/opkele/curl.h b/include/opkele/curl.h
index 5cf8e48..bcaf11d 100644
--- a/include/opkele/curl.h
+++ b/include/opkele/curl.h
@@ -1,72 +1,92 @@
1#ifndef __OPKELE_CURL_H 1#ifndef __OPKELE_CURL_H
2#define __OPKELE_CURL_H 2#define __OPKELE_CURL_H
3 3
4#include <cassert> 4#include <cassert>
5#include <string> 5#include <string>
6#include <algorithm> 6#include <algorithm>
7#include <curl/curl.h> 7#include <curl/curl.h>
8 8
9namespace opkele { 9namespace opkele {
10 using std::min; 10 using std::min;
11 using std::string; 11 using std::string;
12 12
13 namespace util { 13 namespace util {
14 14
15 class curl_slist_t {
16 public:
17 curl_slist *_s;
18
19 curl_slist_t() : _s(0) { }
20 curl_slist_t(curl_slist *s) : _s(s) { }
21 virtual ~curl_slist_t() throw();
22
23 curl_slist_t& operator=(curl_slist *s);
24
25 operator const curl_slist*(void) const { return _s; }
26 operator curl_slist*(void) { return _s; }
27
28 void append(const char *str);
29 void append(const string& str) {
30 append(str.c_str()); }
31 };
32
15 class curl_t { 33 class curl_t {
16 public: 34 public:
17 CURL *_c; 35 CURL *_c;
18 36
19 curl_t() : _c(0) { } 37 curl_t() : _c(0) { }
20 curl_t(CURL *c) : _c(c) { } 38 curl_t(CURL *c) : _c(c) { }
21 virtual ~curl_t() throw(); 39 virtual ~curl_t() throw();
22 40
23 curl_t& operator=(CURL *c); 41 curl_t& operator=(CURL *c);
24 42
25 operator const CURL*(void) const { return _c; } 43 operator const CURL*(void) const { return _c; }
26 operator CURL*(void) { return _c; } 44 operator CURL*(void) { return _c; }
27 45
28 CURLcode misc_sets(); 46 CURLcode misc_sets();
29 47
30 template<typename PT> 48 template<typename PT>
31 inline CURLcode easy_setopt(CURLoption o,PT p) { assert(_c); return curl_easy_setopt(_c,o,p); } 49 inline CURLcode easy_setopt(CURLoption o,PT p) { assert(_c); return curl_easy_setopt(_c,o,p); }
50 inline CURLcode easy_setopt(CURLoption o,const curl_slist_t& p) {
51 assert(_c); return curl_easy_setopt(_c,o,(const curl_slist*)p); }
32 CURLcode easy_perform() { assert(_c); return curl_easy_perform(_c); } 52 CURLcode easy_perform() { assert(_c); return curl_easy_perform(_c); }
33 template<typename IT> 53 template<typename IT>
34 inline CURLcode easy_getinfo(CURLINFO i,IT p) { assert(_c); return curl_easy_getinfo(_c,i,p); } 54 inline CURLcode easy_getinfo(CURLINFO i,IT p) { assert(_c); return curl_easy_getinfo(_c,i,p); }
35 55
36 static inline CURL *easy_init() { return curl_easy_init(); } 56 static inline CURL *easy_init() { return curl_easy_init(); }
37 57
38 virtual size_t write(void* /* p */,size_t /* s */,size_t /* nm */) { return 0; } 58 virtual size_t write(void* /* p */,size_t /* s */,size_t /* nm */) { return 0; }
39 CURLcode set_write(); 59 CURLcode set_write();
40 60
41 virtual int progress(double /* dlt */,double /* dln*/ ,double /* ult */,double /* uln */) { return 0; } 61 virtual int progress(double /* dlt */,double /* dln*/ ,double /* ult */,double /* uln */) { return 0; }
42 CURLcode set_progress(); 62 CURLcode set_progress();
43 63
44 virtual size_t header(void* /* p */,size_t s,size_t nm) { return s*nm; } 64 virtual size_t header(void* /* p */,size_t s,size_t nm) { return s*nm; }
45 CURLcode set_header(); 65 CURLcode set_header();
46 }; 66 };
47 67
48 template<int lim> 68 template<int lim>
49 class curl_fetch_string_t : public curl_t { 69 class curl_fetch_string_t : public curl_t {
50 public: 70 public:
51 curl_fetch_string_t(CURL *c) 71 curl_fetch_string_t(CURL *c)
52 : curl_t(c) { } 72 : curl_t(c) { }
53 ~curl_fetch_string_t() throw() { } 73 ~curl_fetch_string_t() throw() { }
54 74
55 string response; 75 string response;
56 76
57 size_t write(void *p,size_t size,size_t nmemb) { 77 size_t write(void *p,size_t size,size_t nmemb) {
58 size_t bytes = size*nmemb; 78 size_t bytes = size*nmemb;
59 size_t get = min(lim-response.length(),bytes); 79 size_t get = min(lim-response.length(),bytes);
60 response.append((const char *)p,get); 80 response.append((const char *)p,get);
61 return get; 81 return get;
62 } 82 }
63 }; 83 };
64 84
65 typedef curl_fetch_string_t<16384> curl_pick_t; 85 typedef curl_fetch_string_t<16384> curl_pick_t;
66 86
67 87
68 } 88 }
69 89
70} 90}
71 91
72#endif /* __OPKELE_CURL_H */ 92#endif /* __OPKELE_CURL_H */