diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-12-11 06:13:02 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-12-11 06:13:02 +0000 |
commit | 36adc76235fb0a38e7042bc751f988b71627e2a0 (patch) | |
tree | fc83b3f4e0afeb3932c8d200f5493f0a8d6c4619 /sca-cpp/trunk/components/smtp/smtppost.cpp | |
parent | 86b1de85536e93c59a25702a5a2d3e384202ffd2 (diff) |
Changes to get successful C++11 based build. Code cleanup, dependency upgrades, and const + inline optimizations in components, samples, and app hosting server.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1420007 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r-- | sca-cpp/trunk/components/smtp/smtppost.cpp | 90 |
1 files changed, 35 insertions, 55 deletions
diff --git a/sca-cpp/trunk/components/smtp/smtppost.cpp b/sca-cpp/trunk/components/smtp/smtppost.cpp index 1030ccc223..396b1a0a38 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, 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, const http::CURLSession& cs) { // Convert value to a content request const failable<list<list<string> > > freq = http::contentRequest(val, url); if (!hasContent(freq)) @@ -52,7 +52,7 @@ const failable<value> post(const string& url, const string& user, const string& http::cleanup(cs); return mkfailure<value>(fch); } - CURL* ch = content(fch); + CURL* const ch = content(fch); curl_easy_setopt(ch, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL); // Convert message to a string @@ -88,25 +88,25 @@ const failable<value> post(const string& url, const string& user, const string& } http::cleanup(cs); - return value(true); + return trueValue; } /** * 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, - http::CURLSession& ch) { +const failable<value> get(const lvvlambda& url, + const lvvlambda& user, const lvvlambda& pass, + const lvvlambda& from, const lvvlambda& to, + const lvvlambda& subject, const lvvlambda& val, + const http::CURLSession& ch) { debug("smtppost::get"); - const value u = url(mklist<value>("get", list<value>())); - const value i = user(mklist<value>("get", list<value>())); - const value p = pass(mklist<value>("get", list<value>())); - const value f = from(mklist<value>("get", list<value>())); - const value t = to(mklist<value>("get", list<value>())); - const value s = subject(mklist<value>("get", list<value>())); - const value v = val(mklist<value>("get", list<value>())); + const value u = url(mklist<value>("get", nilListValue)); + const value i = user(mklist<value>("get", nilListValue)); + const value p = pass(mklist<value>("get", nilListValue)); + const value f = from(mklist<value>("get", nilListValue)); + const value t = to(mklist<value>("get", nilListValue)); + const value s = subject(mklist<value>("get", nilListValue)); + const value v = val(mklist<value>("get", nilListValue)); debug(u, "smtppost::get::url"); debug(i, "smtppost::get::user"); debug(p, "smtppost::get::pass"); @@ -118,53 +118,33 @@ const failable<value> get(const lambda<value(const list<value>&)>& url, } /** - * Component implementation lambda function. + * Start the component. */ -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, - perthread_ptr<http::CURLSession>& ch) : - url(url), user(user), pass(pass), from(from), to(to), subject(subject), val(val), ch(ch) { - } +const failable<value> start(const list<value>& params) { + // Create a CURL session + const gc_pool cp(gc_current_pool()); + const lambda<const gc_ptr<http::CURLSession>()> newsession = [cp]() -> const gc_ptr<http::CURLSession> { + const gc_scoped_pool sp(pool(cp)); + return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, 0); + }; + const perthread_ptr<http::CURLSession> ch = *(new (gc_new<perthread_ptr<http::CURLSession> >()) perthread_ptr<http::CURLSession>(newsession)); - const value operator()(const list<value>& params) const { + // Return the component implementation lambda function + const lvvlambda url = car(params); + const lvvlambda user = cadr(params); + const lvvlambda pass = caddr(params); + const lvvlambda from = cadddr(params); + const lvvlambda to = caddddr(params); + const lvvlambda subject = cadddddr(params); + const lvvlambda val = caddddddr(params); + const lvvlambda applysmtp = [url, user, pass, from, to, subject, val, ch](const list<value>& params) -> const value { debug(params, "smtppost::applysmtp::params"); const value func(car(params)); if (func == "get") return get(url, user, pass, from, to, subject, val, *ch); return mkfailure<value>(); - } - -private: - 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; -}; - -/** - * Create a new CURL session. - */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", 0); -} - -/** - * Start the component. - */ -const failable<value> start(const list<value>& params) { - // Create a CURL session - 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))); + }; + return value(applysmtp); } } |