-rw-r--r-- | include/opkele/oauth/consumer.h | 5 | ||||
-rw-r--r-- | lib/oauth-consumer.cc | 28 |
2 files changed, 33 insertions, 0 deletions
diff --git a/include/opkele/oauth/consumer.h b/include/opkele/oauth/consumer.h index 1e2784c..9196297 100644 --- a/include/opkele/oauth/consumer.h +++ b/include/opkele/oauth/consumer.h @@ -6,2 +6,3 @@ #include <opkele/oauth.h> +#include <opkele/curl.h> @@ -43,4 +44,8 @@ namespace opkele { + util::curl_slist_t _curl_headers_list; + http_request_t(const string& m,const string& u) : method(m), url(u) { } + + void setup_curl(CURL *curl); }; diff --git a/lib/oauth-consumer.cc b/lib/oauth-consumer.cc index d717ed3..0c4c9e3 100644 --- a/lib/oauth-consumer.cc +++ b/lib/oauth-consumer.cc @@ -224,2 +224,30 @@ namespace opkele { + void http_request_t::setup_curl(CURL *curl) { + CURLcode r; + r = curl_easy_setopt(curl,CURLOPT_URL,url.c_str()); + if(r) + throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r); + if(method=="POST") { + (r = curl_easy_setopt(curl,CURLOPT_POST,1)) + || (r = curl_easy_setopt(curl,CURLOPT_POSTFIELDS,body.c_str())) + || (r = curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,body.size())); + }else if(method=="GET") { + r = curl_easy_setopt(curl,CURLOPT_HTTPGET,1); + }else if(method=="HEAD") { + r = curl_easy_setopt(curl,CURLOPT_NOBODY,1); + }else /* TODO: specialize exception */ + throw exception(OPKELE_CP_ "don't know how to handle http method"); + if(r) + throw exception_curl(OPKELE_CP_ "failed to set curly options",r); + if(!authorize_header.empty()) { + r = curl_easy_setopt(curl,CURLOPT_HTTPHEADER,(curl_slist*)( + _curl_headers_list = curl_slist_append( + 0,string("Authorization: "+authorize_header).c_str() + ) + ) ); + if(r) + throw exception_curl(OPKELE_CP_ "failed to setup curlie header"); + } + } + |