diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-07-16 06:47:59 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-07-16 06:47:59 +0000 |
commit | 419f903ff44a22debba43976baae1e86c1e5d871 (patch) | |
tree | 8e715931d2f85c036a27f7de47c6e665ae7d8e80 /sca-cpp/trunk/components/smtp/smtppost.cpp | |
parent | 11522a4b90a4056319cdbc204fffc63780cbfa51 (diff) |
Add a timeout property to the CURL HTTP clients.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1361916 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r-- | sca-cpp/trunk/components/smtp/smtppost.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/sca-cpp/trunk/components/smtp/smtppost.cpp b/sca-cpp/trunk/components/smtp/smtppost.cpp index db2ac9ef18..1030ccc223 100644 --- a/sca-cpp/trunk/components/smtp/smtppost.cpp +++ b/sca-cpp/trunk/components/smtp/smtppost.cpp @@ -38,7 +38,7 @@ namespace smtppost { /** * Post/send an email message using SMTP. */ -const failable<value> post(const string& url, const string& user, const string& pass, const string& from, const string& to, const string& subject, const value& val, const http::CURLSession& cs) { +const failable<value> post(const string& url, const string& user, const string& pass, const string& from, const string& to, const string& subject, const value& val, http::CURLSession& cs) { // Convert value to a content request const failable<list<list<string> > > freq = http::contentRequest(val, url); if (!hasContent(freq)) @@ -48,8 +48,10 @@ const failable<value> post(const string& url, const string& user, const string& // Setup the CURL session const failable<CURL*> fch = http::setup(url, cs); - if (!hasContent(fch)) + if (!hasContent(fch)) { + http::cleanup(cs); return mkfailure<value>(fch); + } CURL* ch = content(fch); curl_easy_setopt(ch, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL); @@ -80,18 +82,22 @@ const failable<value> post(const string& url, const string& user, const string& curl_slist_free_all(rcpt); // Return the CURL return code or true - if (rc) + if (rc) { + http::cleanup(cs); return mkfailure<value>(string(curl_easy_strerror(rc))); + } + + http::cleanup(cs); return value(true); } /** * Evaluate an SMTP post/send. */ -const failable<value> get(const lambda<value(const list<value>&)> url, - const lambda<value(const list<value>&)> user, const lambda<value(const list<value>&)> pass, - const lambda<value(const list<value>&)> from, const lambda<value(const list<value>&)> to, - const lambda<value(const list<value>&)> subject, const lambda<value(const list<value>&)> val, +const failable<value> get(const lambda<value(const list<value>&)>& url, + const lambda<value(const list<value>&)>& user, const lambda<value(const list<value>&)>& pass, + const lambda<value(const list<value>&)>& from, const lambda<value(const list<value>&)>& to, + const lambda<value(const list<value>&)>& subject, const lambda<value(const list<value>&)>& val, http::CURLSession& ch) { debug("smtppost::get"); const value u = url(mklist<value>("get", list<value>())); @@ -116,11 +122,11 @@ const failable<value> get(const lambda<value(const list<value>&)> url, */ class applysmtp { public: - applysmtp(const lambda<value(const list<value>&)> url, - const lambda<value(const list<value>&)> user, const lambda<value(const list<value>&)> pass, - const lambda<value(const list<value>&)> from, const lambda<value(const list<value>&)> to, - const lambda<value(const list<value>&)> subject, const lambda<value(const list<value>&)> val, - const perthread_ptr<http::CURLSession>& ch) : + applysmtp(const lambda<value(const list<value>&)>& url, + const lambda<value(const list<value>&)>& user, const lambda<value(const list<value>&)>& pass, + const lambda<value(const list<value>&)>& from, const lambda<value(const list<value>&)>& to, + const lambda<value(const list<value>&)>& subject, const lambda<value(const list<value>&)>& val, + perthread_ptr<http::CURLSession>& ch) : url(url), user(user), pass(pass), from(from), to(to), subject(subject), val(val), ch(ch) { } @@ -147,7 +153,7 @@ private: * Create a new CURL session. */ const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", 0); } /** @@ -155,7 +161,7 @@ const gc_ptr<http::CURLSession> newsession() { */ const failable<value> start(const list<value>& params) { // Create a CURL session - const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession)); + perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession)); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applysmtp(car(params), cadr(params), caddr(params), cadddr(params), caddddr(params), cadddddr(params), caddddddr(params), ch))); |