From 0d19bbaa23b7bd07ec4f5e3683ffdd8df4641bc9 Mon Sep 17 00:00:00 2001 From: Michael Krelin Date: Fri, 07 Mar 2008 19:45:26 +0000 Subject: added a helper to prepare curl request based on http_request_t * added curl_slist to http_request_t structure * added http_request_t::setup_curl(CURL*) Signed-off-by: Michael Krelin --- 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 @@ -4,6 +4,7 @@ #include #include #include +#include namespace opkele { namespace oauth { @@ -41,8 +42,12 @@ namespace opkele { string url; string body; + 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); }; class basic_consumer { 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 @@ -222,6 +222,34 @@ namespace opkele { t,realm); } + 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"); + } + } + const basic_provider_endpoints& simple_consumer::get_endpoints() const { return peps; } -- cgit v0.9.0.2