summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/components/http/httppost.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/components/http/httppost.cpp')
-rw-r--r--sca-cpp/trunk/components/http/httppost.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/sca-cpp/trunk/components/http/httppost.cpp b/sca-cpp/trunk/components/http/httppost.cpp
index 9784c4513c..0879ad2e59 100644
--- a/sca-cpp/trunk/components/http/httppost.cpp
+++ b/sca-cpp/trunk/components/http/httppost.cpp
@@ -28,6 +28,7 @@
#include "list.hpp"
#include "value.hpp"
#include "monad.hpp"
+#include "parallel.hpp"
#include "../../modules/http/http.hpp"
namespace tuscany {
@@ -50,29 +51,36 @@ 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, 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 {
debug(params, "httppost::applyhttp::params");
const value func(car(params));
if (func == "get")
- return get(url, val, ch);
+ return get(url, val, *ch);
return tuscany::mkfailure<tuscany::value>();
}
private:
const lambda<value(const list<value>&)> url;
const lambda<value(const list<value>&)> val;
- http::CURLSession& ch;
+ perthread_ptr<http::CURLSession> ch;
};
/**
+ * Create a new CURL session.
+ */
+const gc_ptr<http::CURLSession> newsession() {
+ return new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", "");
+}
+
+/**
* Start the component.
*/
const failable<value> start(const list<value>& params) {
// Create a CURL session
- http::CURLSession& ch = *(new (gc_new<http::CURLSession>()) http::CURLSession("", "", "", ""));
+ const 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>&)>(applyhttp(car(params), cadr(params), ch)));