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 | |
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 '')
20 files changed, 132 insertions, 76 deletions
diff --git a/sca-cpp/trunk/components/cache/client-test.cpp b/sca-cpp/trunk/components/cache/client-test.cpp index b652ad3a88..63d1691f8b 100644 --- a/sca-cpp/trunk/components/cache/client-test.cpp +++ b/sca-cpp/trunk/components/cache/client-test.cpp @@ -43,7 +43,7 @@ const string partition1uri("http://localhost:8090/partitioner/a"); const string partition2uri("http://localhost:8090/partitioner/b"); bool testCache(const string& uri) { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const list<value> i = list<value>() + "content" + (list<value>() + "item" + (list<value>() + "name" + string("Apple")) @@ -103,7 +103,7 @@ bool testDatacache() { } bool testMemocache() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> res = http::evalExpr(mklist<value>(string("add"), 33, 22), memocacheuri, cs); assert(hasContent(res)); @@ -117,7 +117,7 @@ bool testMemocache() { } bool testPartitioner() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> res1 = http::get(partition1uri, cs); assert(hasContent(res1)); @@ -133,8 +133,8 @@ bool testPartitioner() { struct getLoop { const string path; const value entry; - http::CURLSession cs; - getLoop(const string& path, const value& entry, http::CURLSession cs) : path(path), entry(entry), cs(cs) { + http::CURLSession& cs; + getLoop(const string& path, const value& entry, http::CURLSession& cs) : path(path), entry(entry), cs(cs) { } const bool operator()() const { const failable<value> val = http::get(memcacheuri + path, cs); @@ -153,7 +153,7 @@ bool testGetPerf() { + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")) + i); - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> id = http::post(a, memcacheuri, cs); assert(hasContent(id)); const string p = path(content(id)); diff --git a/sca-cpp/trunk/components/chat/client-test.cpp b/sca-cpp/trunk/components/chat/client-test.cpp index 9595194fe9..220382fa89 100644 --- a/sca-cpp/trunk/components/chat/client-test.cpp +++ b/sca-cpp/trunk/components/chat/client-test.cpp @@ -86,7 +86,7 @@ bool testListen() { bool testPost() { gc_scoped_pool pool; - http::CURLSession ch("", "", "", ""); + http::CURLSession ch("", "", "", "", 0); const failable<value> id = http::post(entry, "http://localhost:8090/print-sender/sca2@localhost", ch); assert(hasContent(id)); return true; diff --git a/sca-cpp/trunk/components/constdb/client-test.cpp b/sca-cpp/trunk/components/constdb/client-test.cpp index 766e1d2583..ea45762cd6 100644 --- a/sca-cpp/trunk/components/constdb/client-test.cpp +++ b/sca-cpp/trunk/components/constdb/client-test.cpp @@ -39,7 +39,7 @@ namespace constdb { const string uri("http://localhost:8090/constdb"); bool testConstDb() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const list<value> i = list<value>() + "content" + (list<value>() + "item" + (list<value>() + "name" + string("Apple")) @@ -93,8 +93,8 @@ bool testConstDb() { struct getLoop { const string path; const value entry; - http::CURLSession cs; - getLoop(const string& path, const value& entry, http::CURLSession cs) : path(path), entry(entry), cs(cs) { + http::CURLSession& cs; + getLoop(const string& path, const value& entry, http::CURLSession& cs) : path(path), entry(entry), cs(cs) { } const bool operator()() const { const failable<value> val = http::get(uri + path, cs); @@ -113,7 +113,7 @@ bool testGetPerf() { + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")) + i); - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> id = http::post(a, uri, cs); assert(hasContent(id)); const string p = path(content(id)); diff --git a/sca-cpp/trunk/components/filedb/client-test.cpp b/sca-cpp/trunk/components/filedb/client-test.cpp index 19f76c22fe..e0f98d8c3b 100644 --- a/sca-cpp/trunk/components/filedb/client-test.cpp +++ b/sca-cpp/trunk/components/filedb/client-test.cpp @@ -39,7 +39,7 @@ namespace filedb { const string uri("http://localhost:8090/filedb"); bool testFileDB() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const list<value> i = list<value>() + "content" + (list<value>() + "item" + (list<value>() + "name" + string("Apple")) @@ -93,8 +93,8 @@ bool testFileDB() { struct getLoop { const string path; const value entry; - http::CURLSession cs; - getLoop(const string& path, const value& entry, http::CURLSession cs) : path(path), entry(entry), cs(cs) { + http::CURLSession& cs; + getLoop(const string& path, const value& entry, http::CURLSession& cs) : path(path), entry(entry), cs(cs) { } const bool operator()() const { const failable<value> val = http::get(uri + path, cs); @@ -113,7 +113,7 @@ bool testGetPerf() { + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")) + i); - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> id = http::post(a, uri, cs); assert(hasContent(id)); const string p = path(content(id)); diff --git a/sca-cpp/trunk/components/http/client-test.cpp b/sca-cpp/trunk/components/http/client-test.cpp index c040ed39df..bb1918f1f8 100644 --- a/sca-cpp/trunk/components/http/client-test.cpp +++ b/sca-cpp/trunk/components/http/client-test.cpp @@ -42,7 +42,7 @@ const string putURI("http://localhost:8090/httpput"); const string deleteURI("http://localhost:8090/httpdelete"); bool testGet() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> val = http::get(getURI, cs); assert(hasContent(val)); @@ -50,8 +50,8 @@ bool testGet() { } struct getLoop { - http::CURLSession cs; - getLoop(http::CURLSession cs) : cs(cs) { + http::CURLSession& cs; + getLoop(http::CURLSession& cs) : cs(cs) { } const bool operator()() const { const failable<value> val = http::get(getURI, cs); @@ -61,7 +61,7 @@ struct getLoop { }; bool testGetPerf() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const lambda<bool()> gl = getLoop(cs); cout << "HTTP get test " << time(gl, 5, 200) << " ms" << endl; @@ -70,7 +70,7 @@ bool testGetPerf() { } bool testPost() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> val = http::get(postURI, cs); assert(hasContent(val)); @@ -78,7 +78,7 @@ bool testPost() { } bool testPut() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> val = http::get(putURI, cs); assert(hasContent(val)); @@ -86,7 +86,7 @@ bool testPut() { } bool testDelete() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> val = http::get(deleteURI, cs); assert(hasContent(val)); diff --git a/sca-cpp/trunk/components/http/http.composite b/sca-cpp/trunk/components/http/http.composite index ea0adedf51..32c0da62c0 100644 --- a/sca-cpp/trunk/components/http/http.composite +++ b/sca-cpp/trunk/components/http/http.composite @@ -23,6 +23,7 @@ <component name="httpget"> <implementation.cpp path="." library="libhttpget"/> + <property name="timeout">0</property> <service name="httpget"> <binding.http uri="httpget"/> </service> @@ -31,6 +32,7 @@ <component name="httppost"> <implementation.cpp path="." library="libhttppost"/> + <property name="timeout">0</property> <service name="httppost"> <binding.http uri="httppost"/> </service> @@ -40,6 +42,7 @@ <component name="httpput"> <implementation.cpp path="." library="libhttpput"/> + <property name="timeout">0</property> <service name="httpput"> <binding.http uri="httpput"/> </service> @@ -49,6 +52,7 @@ <component name="httppatch"> <implementation.cpp path="." library="libhttppatch"/> + <property name="timeout">0</property> <service name="httppatch"> <binding.http uri="httppatch"/> </service> @@ -58,6 +62,7 @@ <component name="httpdelete"> <implementation.cpp path="." library="libhttpdelete"/> + <property name="timeout">0</property> <service name="httpdelete"> <binding.http uri="httpdelete"/> </service> diff --git a/sca-cpp/trunk/components/http/httpdelete.componentType b/sca-cpp/trunk/components/http/httpdelete.componentType index 34e2a60632..c2d728a538 100644 --- a/sca-cpp/trunk/components/http/httpdelete.componentType +++ b/sca-cpp/trunk/components/http/httpdelete.componentType @@ -22,6 +22,7 @@ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components"> + <property name="timeout"/> <service name="httpdelete"/> <reference name="url"/> diff --git a/sca-cpp/trunk/components/http/httpdelete.cpp b/sca-cpp/trunk/components/http/httpdelete.cpp index d78a4d60df..c725461ec2 100644 --- a/sca-cpp/trunk/components/http/httpdelete.cpp +++ b/sca-cpp/trunk/components/http/httpdelete.cpp @@ -37,7 +37,7 @@ namespace httpdelete { /** * Evaluate an HTTP delete. */ -const failable<value> get(const lambda<value(const list<value>&)> url, http::CURLSession& ch) { +const failable<value> get(const lambda<value(const list<value>&)>& url, http::CURLSession& ch) { debug("httpdelete::get"); const value u = url(mklist<value>("get", list<value>())); debug(u, "httpdelete::get::url"); @@ -49,7 +49,7 @@ const failable<value> get(const lambda<value(const list<value>&)> url, http::CUR */ class applyhttp { public: - applyhttp(const lambda<value(const list<value>&)> url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) { + applyhttp(const lambda<value(const list<value>&)>& url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) { } const value operator()(const list<value>& params) const { @@ -68,16 +68,24 @@ private: /** * Create a new CURL session. */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); -} +class newsession { +public: + newsession(const lambda<value(const list<value>&)>& timeout) : timeout(timeout) { + } + const gc_ptr<http::CURLSession> operator()() const { + const int t = atoi(c_str((string)timeout(list<value>()))); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", t); + } +private: + const lambda<value(const list<value>&)> timeout; +}; /** * Start the component. */ 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)); + const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(cadr(params)))); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applyhttp(car(params), ch))); diff --git a/sca-cpp/trunk/components/http/httpget.componentType b/sca-cpp/trunk/components/http/httpget.componentType index a45474b88d..c6c24fbed8 100644 --- a/sca-cpp/trunk/components/http/httpget.componentType +++ b/sca-cpp/trunk/components/http/httpget.componentType @@ -22,6 +22,7 @@ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components"> + <property name="timeout"/> <service name="httpget"/> <reference name="url"/> diff --git a/sca-cpp/trunk/components/http/httpget.cpp b/sca-cpp/trunk/components/http/httpget.cpp index 8515d6f41e..884dc1a6ff 100644 --- a/sca-cpp/trunk/components/http/httpget.cpp +++ b/sca-cpp/trunk/components/http/httpget.cpp @@ -38,7 +38,7 @@ namespace httpget { /** * Evaluate an HTTP get. */ -const failable<value> get(const lambda<value(const list<value>&)> url, http::CURLSession& ch) { +const failable<value> get(const lambda<value(const list<value>&)>& url, http::CURLSession& ch) { debug("httpget::get"); const value u = url(mklist<value>("get", list<value>())); debug(u, "httpget::get::url"); @@ -50,7 +50,7 @@ const failable<value> get(const lambda<value(const list<value>&)> url, http::CUR */ class applyhttp { public: - applyhttp(const lambda<value(const list<value>&)> url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) { + applyhttp(const lambda<value(const list<value>&)>& url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) { } const value operator()(const list<value>& params) const { @@ -70,16 +70,24 @@ private: /** * Create a new CURL session. */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); -} +class newsession { +public: + newsession(const lambda<value(const list<value>&)>& timeout) : timeout(timeout) { + } + const gc_ptr<http::CURLSession> operator()() const { + const int t = atoi(c_str((string)timeout(list<value>()))); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", t); + } +private: + const lambda<value(const list<value>&)> timeout; +}; /** * Start the component. */ 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)); + const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(cadr(params)))); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applyhttp(car(params), ch))); diff --git a/sca-cpp/trunk/components/http/httppatch.componentType b/sca-cpp/trunk/components/http/httppatch.componentType index 0ab5ecf45b..eb3a96078b 100644 --- a/sca-cpp/trunk/components/http/httppatch.componentType +++ b/sca-cpp/trunk/components/http/httppatch.componentType @@ -22,6 +22,7 @@ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components"> + <property name="timeout"/> <service name="httppatch"/> <reference name="url"/> <reference name="content"/> diff --git a/sca-cpp/trunk/components/http/httppatch.cpp b/sca-cpp/trunk/components/http/httppatch.cpp index 3e6f7af2c0..051b1e09ac 100644 --- a/sca-cpp/trunk/components/http/httppatch.cpp +++ b/sca-cpp/trunk/components/http/httppatch.cpp @@ -38,7 +38,7 @@ namespace httppatch { /** * Evaluate an HTTP patch. */ -const failable<value> get(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, http::CURLSession& ch) { +const failable<value> get(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, http::CURLSession& ch) { debug("httppatch::get"); const value u = url(mklist<value>("get", list<value>())); const value v = val(mklist<value>("get", list<value>())); @@ -52,7 +52,7 @@ const failable<value> get(const lambda<value(const list<value>&)> url, const lam */ class applyhttp { public: - applyhttp(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { + applyhttp(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { } const value operator()(const list<value>& params) const { @@ -72,16 +72,24 @@ private: /** * Create a new CURL session. */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); -} +class newsession { +public: + newsession(const lambda<value(const list<value>&)>& timeout) : timeout(timeout) { + } + const gc_ptr<http::CURLSession> operator()() const { + const int t = atoi(c_str((string)timeout(list<value>()))); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", t); + } +private: + const lambda<value(const list<value>&)> timeout; +}; /** * Start the component. */ 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)); + const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(caddr(params)))); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch))); diff --git a/sca-cpp/trunk/components/http/httppost.componentType b/sca-cpp/trunk/components/http/httppost.componentType index 2cb7310332..42b0096446 100644 --- a/sca-cpp/trunk/components/http/httppost.componentType +++ b/sca-cpp/trunk/components/http/httppost.componentType @@ -22,6 +22,7 @@ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components"> + <property name="timeout"/> <service name="httppost"/> <reference name="url"/> <reference name="content"/> diff --git a/sca-cpp/trunk/components/http/httppost.cpp b/sca-cpp/trunk/components/http/httppost.cpp index 8d0f526bdc..84fd984e19 100644 --- a/sca-cpp/trunk/components/http/httppost.cpp +++ b/sca-cpp/trunk/components/http/httppost.cpp @@ -38,7 +38,7 @@ namespace httppost { /** * Evaluate an HTTP post. */ -const failable<value> get(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, http::CURLSession& ch) { +const failable<value> get(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, http::CURLSession& ch) { debug("httppost::get"); const value u = url(mklist<value>("get", list<value>())); const value v = val(mklist<value>("get", list<value>())); @@ -52,7 +52,7 @@ const failable<value> get(const lambda<value(const list<value>&)> url, const lam */ class applyhttp { public: - applyhttp(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { + applyhttp(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { } const value operator()(const list<value>& params) const { @@ -72,16 +72,24 @@ private: /** * Create a new CURL session. */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); -} +class newsession { +public: + newsession(const lambda<value(const list<value>&)>& timeout) : timeout(timeout) { + } + const gc_ptr<http::CURLSession> operator()() const { + const int t = atoi(c_str((string)timeout(list<value>()))); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", t); + } +private: + const lambda<const value(const list<value>&)> timeout; +}; /** * Start the component. */ 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)); + const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(caddr(params)))); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch))); diff --git a/sca-cpp/trunk/components/http/httpput.componentType b/sca-cpp/trunk/components/http/httpput.componentType index 654bb5e82f..791a7faa8a 100644 --- a/sca-cpp/trunk/components/http/httpput.componentType +++ b/sca-cpp/trunk/components/http/httpput.componentType @@ -22,6 +22,7 @@ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://tuscany.apache.org/xmlns/sca/components"> + <property name="timeout"/> <service name="httpput"/> <reference name="url"/> <reference name="content"/> diff --git a/sca-cpp/trunk/components/http/httpput.cpp b/sca-cpp/trunk/components/http/httpput.cpp index c157ee32cc..2ae5da396e 100644 --- a/sca-cpp/trunk/components/http/httpput.cpp +++ b/sca-cpp/trunk/components/http/httpput.cpp @@ -38,7 +38,7 @@ namespace httpput { /** * Evaluate an HTTP put. */ -const failable<value> get(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, http::CURLSession& ch) { +const failable<value> get(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, http::CURLSession& ch) { debug("httpput::get"); const value u = url(mklist<value>("get", list<value>())); const value v = val(mklist<value>("get", list<value>())); @@ -52,7 +52,7 @@ const failable<value> get(const lambda<value(const list<value>&)> url, const lam */ class applyhttp { public: - applyhttp(const lambda<value(const list<value>&)> url, const lambda<value(const list<value>&)> val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { + applyhttp(const lambda<value(const list<value>&)>& url, const lambda<value(const list<value>&)>& val, const perthread_ptr<http::CURLSession>& ch) : url(url), val(val), ch(ch) { } const value operator()(const list<value>& params) const { @@ -72,16 +72,24 @@ private: /** * Create a new CURL session. */ -const gc_ptr<http::CURLSession> newsession() { - return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""); -} +class newsession { +public: + newsession(const lambda<value(const list<value>&)>& timeout) : timeout(timeout) { + } + const gc_ptr<http::CURLSession> operator()() const { + const int t = atoi(c_str((string)timeout(list<value>()))); + return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "", t); + } +private: + const lambda<value(const list<value>&)> timeout; +}; /** * Start the component. */ 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)); + const perthread_ptr<http::CURLSession> ch = perthread_ptr<http::CURLSession>(lambda<gc_ptr<http::CURLSession>()>(newsession(caddr(params)))); // Return the component implementation lambda function return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch))); diff --git a/sca-cpp/trunk/components/log/client-test.cpp b/sca-cpp/trunk/components/log/client-test.cpp index c67d3a4b27..d8cac5ee81 100644 --- a/sca-cpp/trunk/components/log/client-test.cpp +++ b/sca-cpp/trunk/components/log/client-test.cpp @@ -39,7 +39,7 @@ namespace log { const string uri("http://localhost:8090/log"); bool testLog() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const list<value> i = list<value>() + "content" + (list<value>() + "item" + (list<value>() + "name" + string("Apple")) @@ -58,8 +58,8 @@ bool testLog() { struct logLoop { const value a; const string uri; - http::CURLSession cs; - logLoop(const value& a, const string& uri, http::CURLSession cs) : a(a), uri(uri), cs(cs) { + http::CURLSession& cs; + logLoop(const value& a, const string& uri, http::CURLSession& cs) : a(a), uri(uri), cs(cs) { } const bool operator()() const { const failable<value> id = http::post(a, uri, cs); @@ -77,7 +77,7 @@ bool testLogPerf() { + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")) + i); - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> id = http::post(a, uri, cs); assert(hasContent(id)); @@ -88,7 +88,7 @@ bool testLogPerf() { } bool testLogger() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> res = http::evalExpr(mklist<value>(string("sum"), 33, 22), string("http://localhost:8090/client"), cs); assert(hasContent(res)); diff --git a/sca-cpp/trunk/components/smtp/client-test.cpp b/sca-cpp/trunk/components/smtp/client-test.cpp index 216861d35e..10274a6248 100644 --- a/sca-cpp/trunk/components/smtp/client-test.cpp +++ b/sca-cpp/trunk/components/smtp/client-test.cpp @@ -39,7 +39,7 @@ namespace smtp { const string postURI("http://localhost:8090/smtppost"); bool testPost() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> val = http::get(postURI, cs); assert(hasContent(val)); 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))); diff --git a/sca-cpp/trunk/components/sqldb/client-test.cpp b/sca-cpp/trunk/components/sqldb/client-test.cpp index d5f07de969..0cbcb57363 100644 --- a/sca-cpp/trunk/components/sqldb/client-test.cpp +++ b/sca-cpp/trunk/components/sqldb/client-test.cpp @@ -39,7 +39,7 @@ namespace sqldb { const string uri("http://localhost:8090/sqldb"); bool testSqlDb() { - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const list<value> i = list<value>() + "content" + (list<value>() + "item" + (list<value>() + "name" + string("Apple")) @@ -93,8 +93,8 @@ bool testSqlDb() { struct getLoop { const string path; const value entry; - http::CURLSession cs; - getLoop(const string& path, const value& entry, http::CURLSession cs) : path(path), entry(entry), cs(cs) { + http::CURLSession& cs; + getLoop(const string& path, const value& entry, http::CURLSession& cs) : path(path), entry(entry), cs(cs) { } const bool operator()() const { const failable<value> val = http::get(uri + path, cs); @@ -113,7 +113,7 @@ bool testGetPerf() { + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")) + i); - http::CURLSession cs("", "", "", ""); + http::CURLSession cs("", "", "", "", 0); const failable<value> id = http::post(a, uri, cs); assert(hasContent(id)); const string p = path(content(id)); |