summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/components/http
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/components/http')
-rw-r--r--sca-cpp/trunk/components/http/Makefile.am12
-rw-r--r--sca-cpp/trunk/components/http/client-test.cpp33
-rw-r--r--sca-cpp/trunk/components/http/httpdelete.cpp57
-rw-r--r--sca-cpp/trunk/components/http/httpget.cpp58
-rw-r--r--sca-cpp/trunk/components/http/httppatch.cpp61
-rw-r--r--sca-cpp/trunk/components/http/httppost.cpp61
-rw-r--r--sca-cpp/trunk/components/http/httpput.cpp61
7 files changed, 115 insertions, 228 deletions
diff --git a/sca-cpp/trunk/components/http/Makefile.am b/sca-cpp/trunk/components/http/Makefile.am
index 623be12298..078a7eeae6 100644
--- a/sca-cpp/trunk/components/http/Makefile.am
+++ b/sca-cpp/trunk/components/http/Makefile.am
@@ -23,32 +23,32 @@ comp_LTLIBRARIES = libhttpget.la libhttpdelete.la libhttppost.la libhttpput.la l
noinst_DATA = libhttpget${libsuffix} libhttpdelete${libsuffix} libhttppost${libsuffix} libhttpput${libsuffix} libhttppatch${libsuffix}
libhttpget_la_SOURCES = httpget.cpp
-libhttpget_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttpget_la_LDFLAGS = -lxml2 -ljansson -curl
libhttpget${libsuffix}:
ln -s .libs/libhttpget${libsuffix}
libhttpdelete_la_SOURCES = httpdelete.cpp
-libhttpdelete_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttpdelete_la_LDFLAGS = -lxml2 -ljansson -curl
libhttpdelete${libsuffix}:
ln -s .libs/libhttpdelete${libsuffix}
libhttppost_la_SOURCES = httppost.cpp
-libhttppost_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttppost_la_LDFLAGS = -lxml2 -ljansson -curl
libhttppost${libsuffix}:
ln -s .libs/libhttppost${libsuffix}
libhttpput_la_SOURCES = httpput.cpp
-libhttpput_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttpput_la_LDFLAGS = -lxml2 -ljansson -curl
libhttpput${libsuffix}:
ln -s .libs/libhttpput${libsuffix}
libhttppatch_la_SOURCES = httppatch.cpp
-libhttppatch_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttppatch_la_LDFLAGS = -lxml2 -ljansson -curl
libhttppatch${libsuffix}:
ln -s .libs/libhttppatch${libsuffix}
client_test_SOURCES = client-test.cpp
-client_test_LDFLAGS = -lxml2 -lcurl -lmozjs
+client_test_LDFLAGS = -lxml2 -lcurl -ljansson
dist_noinst_SCRIPTS = server-test
noinst_PROGRAMS = client-test
diff --git a/sca-cpp/trunk/components/http/client-test.cpp b/sca-cpp/trunk/components/http/client-test.cpp
index bb1918f1f8..42d7cd76c0 100644
--- a/sca-cpp/trunk/components/http/client-test.cpp
+++ b/sca-cpp/trunk/components/http/client-test.cpp
@@ -41,52 +41,45 @@ const string postURI("http://localhost:8090/httppost");
const string putURI("http://localhost:8090/httpput");
const string deleteURI("http://localhost:8090/httpdelete");
-bool testGet() {
- http::CURLSession cs("", "", "", "", 0);
+const bool testGet() {
+ const http::CURLSession cs("", "", "", "", 0);
const failable<value> val = http::get(getURI, cs);
assert(hasContent(val));
return true;
}
-struct getLoop {
- http::CURLSession& cs;
- getLoop(http::CURLSession& cs) : cs(cs) {
- }
- const bool operator()() const {
+const bool testGetPerf() {
+ const http::CURLSession cs("", "", "", "", 0);
+
+ const blambda gl = [cs]() -> const bool {
const failable<value> val = http::get(getURI, cs);
assert(hasContent(val));
return true;
- }
-};
-
-bool testGetPerf() {
- http::CURLSession cs("", "", "", "", 0);
-
- const lambda<bool()> gl = getLoop(cs);
+ };
cout << "HTTP get test " << time(gl, 5, 200) << " ms" << endl;
return true;
}
-bool testPost() {
- http::CURLSession cs("", "", "", "", 0);
+const bool testPost() {
+ const http::CURLSession cs("", "", "", "", 0);
const failable<value> val = http::get(postURI, cs);
assert(hasContent(val));
return true;
}
-bool testPut() {
- http::CURLSession cs("", "", "", "", 0);
+const bool testPut() {
+ const http::CURLSession cs("", "", "", "", 0);
const failable<value> val = http::get(putURI, cs);
assert(hasContent(val));
return true;
}
-bool testDelete() {
- http::CURLSession cs("", "", "", "", 0);
+const bool testDelete() {
+ const http::CURLSession cs("", "", "", "", 0);
const failable<value> val = http::get(deleteURI, cs);
assert(hasContent(val));
diff --git a/sca-cpp/trunk/components/http/httpdelete.cpp b/sca-cpp/trunk/components/http/httpdelete.cpp
index c725461ec2..a23d2a411d 100644
--- a/sca-cpp/trunk/components/http/httpdelete.cpp
+++ b/sca-cpp/trunk/components/http/httpdelete.cpp
@@ -37,58 +37,37 @@ 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 lvvlambda& url, const http::CURLSession& ch) {
debug("httpdelete::get");
- const value u = url(mklist<value>("get", list<value>()));
+ const value u = url(mklist<value>("get", nilListValue));
debug(u, "httpdelete::get::url");
return http::del(u, ch);
}
/**
- * Component implementation lambda function.
+ * Start the component.
*/
-class applyhttp {
-public:
- applyhttp(const lambda<value(const list<value>&)>& url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) {
- }
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ const lvvlambda timeout = cadr(params);
+ const gc_pool cp(gc_current_pool());
+ const lambda<const gc_ptr<http::CURLSession>()> newsession = [timeout, cp]() -> const gc_ptr<http::CURLSession> {
+ const gc_scoped_pool sp(pool(cp));
+ const int t = atoi(c_str((string)timeout(nilListValue)));
+ return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, t);
+ };
+ 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 applyhttp = [url, ch](const list<value>& params) -> const value {
debug(params, "httpdelete::applyhttp::params");
const value func(car(params));
if (func == "get")
return get(url, *ch);
return mkfailure<value>();
- }
-
-private:
- const lambda<value(const list<value>&)> url;
- perthread_ptr<http::CURLSession> ch;
-};
-
-/**
- * Create a new CURL session.
- */
-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(cadr(params))));
-
- // Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyhttp(car(params), ch)));
+ };
+ return value(applyhttp);
}
}
diff --git a/sca-cpp/trunk/components/http/httpget.cpp b/sca-cpp/trunk/components/http/httpget.cpp
index 884dc1a6ff..b4504d939a 100644
--- a/sca-cpp/trunk/components/http/httpget.cpp
+++ b/sca-cpp/trunk/components/http/httpget.cpp
@@ -38,59 +38,37 @@ 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 lvvlambda& url, const http::CURLSession& ch) {
debug("httpget::get");
- const value u = url(mklist<value>("get", list<value>()));
+ const value u = url(mklist<value>("get", nilListValue));
debug(u, "httpget::get::url");
return http::get(u, ch);
}
/**
- * Component implementation lambda function.
+ * Start the component.
*/
-class applyhttp {
-public:
- applyhttp(const lambda<value(const list<value>&)>& url, const perthread_ptr<http::CURLSession>& ch) : url(url), ch(ch) {
- }
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ const lvvlambda timeout = cadr(params);
+ const gc_pool cp(gc_current_pool());
+ const lambda<const gc_ptr<http::CURLSession>()> newsession = [timeout, cp]() -> const gc_ptr<http::CURLSession> {
+ const gc_scoped_pool sp(pool(cp));
+ const int t = atoi(c_str((string)timeout(nilListValue)));
+ return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, t);
+ };
+ 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 applyhttp = [url, ch](const list<value>& params) -> const value {
debug(params, "httpget::applyhttp::params");
const value func(car(params));
if (func == "get")
return get(url, *ch);
return mkfailure<value>();
- }
-
-private:
- const lambda<value(const list<value>&)> url;
- perthread_ptr<http::CURLSession> ch;
-};
-
-
-/**
- * Create a new CURL session.
- */
-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(cadr(params))));
-
- // Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyhttp(car(params), ch)));
+ };
+ return value(applyhttp);
}
}
diff --git a/sca-cpp/trunk/components/http/httppatch.cpp b/sca-cpp/trunk/components/http/httppatch.cpp
index 051b1e09ac..4d93249fad 100644
--- a/sca-cpp/trunk/components/http/httppatch.cpp
+++ b/sca-cpp/trunk/components/http/httppatch.cpp
@@ -38,61 +38,40 @@ 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 lvvlambda& url, const lvvlambda& val, const http::CURLSession& ch) {
debug("httppatch::get");
- const value u = url(mklist<value>("get", list<value>()));
- const value v = val(mklist<value>("get", list<value>()));
+ const value u = url(mklist<value>("get", nilListValue));
+ const value v = val(mklist<value>("get", nilListValue));
debug(u, "httppatch::get::url");
debug(v, "httppatch::get::val");
return http::patch(v, u, ch);
}
/**
- * Component implementation lambda function.
+ * Start the component.
*/
-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) {
- }
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ const lvvlambda timeout = caddr(params);
+ const gc_pool cp(gc_current_pool());
+ const lambda<const gc_ptr<http::CURLSession>()> newsession = [timeout, cp]() -> const gc_ptr<http::CURLSession> {
+ const gc_scoped_pool sp(pool(cp));
+ const int t = atoi(c_str((string)timeout(nilListValue)));
+ return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, t);
+ };
+ 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 val = cadr(params);
+ const lvvlambda applyhttp = [url, val, ch](const list<value>& params) -> const value {
debug(params, "httppatch::applyhttp::params");
const value func(car(params));
if (func == "get")
return get(url, val, *ch);
return mkfailure<value>();
- }
-
-private:
- const lambda<value(const list<value>&)> url;
- const lambda<value(const list<value>&)> val;
- perthread_ptr<http::CURLSession> ch;
-};
-
-/**
- * Create a new CURL session.
- */
-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(caddr(params))));
-
- // Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch)));
+ };
+ return value(applyhttp);
}
}
diff --git a/sca-cpp/trunk/components/http/httppost.cpp b/sca-cpp/trunk/components/http/httppost.cpp
index 84fd984e19..99928a2687 100644
--- a/sca-cpp/trunk/components/http/httppost.cpp
+++ b/sca-cpp/trunk/components/http/httppost.cpp
@@ -38,61 +38,40 @@ 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 lvvlambda& url, const lvvlambda& val, const http::CURLSession& ch) {
debug("httppost::get");
- const value u = url(mklist<value>("get", list<value>()));
- const value v = val(mklist<value>("get", list<value>()));
+ const value u = url(mklist<value>("get", nilListValue));
+ const value v = val(mklist<value>("get", nilListValue));
debug(u, "httppost::get::url");
debug(v, "httppost::get::val");
return http::post(v, u, ch);
}
/**
- * Component implementation lambda function.
+ * Start the component.
*/
-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) {
- }
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ const lvvlambda timeout = caddr(params);
+ const gc_pool cp(gc_current_pool());
+ const lambda<const gc_ptr<http::CURLSession>()> newsession = [timeout, cp]() -> const gc_ptr<http::CURLSession> {
+ const gc_scoped_pool sp(pool(cp));
+ const int t = atoi(c_str((string)timeout(nilListValue)));
+ return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, t);
+ };
+ 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 val = cadr(params);
+ const lvvlambda applyhttp = [url, val, ch](const list<value>& params) -> const value {
debug(params, "httppost::applyhttp::params");
const value func(car(params));
if (func == "get")
return get(url, val, *ch);
return mkfailure<value>();
- }
-
-private:
- const lambda<value(const list<value>&)> url;
- const lambda<value(const list<value>&)> val;
- perthread_ptr<http::CURLSession> ch;
-};
-
-/**
- * Create a new CURL session.
- */
-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(caddr(params))));
-
- // Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch)));
+ };
+ return value(applyhttp);
}
}
diff --git a/sca-cpp/trunk/components/http/httpput.cpp b/sca-cpp/trunk/components/http/httpput.cpp
index 2ae5da396e..8f8e2bc168 100644
--- a/sca-cpp/trunk/components/http/httpput.cpp
+++ b/sca-cpp/trunk/components/http/httpput.cpp
@@ -38,61 +38,40 @@ 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 lvvlambda& url, const lvvlambda& val, const http::CURLSession& ch) {
debug("httpput::get");
- const value u = url(mklist<value>("get", list<value>()));
- const value v = val(mklist<value>("get", list<value>()));
+ const value u = url(mklist<value>("get", nilListValue));
+ const value v = val(mklist<value>("get", nilListValue));
debug(u, "httpput::get::url");
debug(v, "httpput::get::val");
return http::put(v, u, ch);
}
/**
- * Component implementation lambda function.
+ * Start the component.
*/
-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) {
- }
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ const lvvlambda timeout = caddr(params);
+ const gc_pool cp(gc_current_pool());
+ const lambda<const gc_ptr<http::CURLSession>()> newsession = [timeout, cp]() -> const gc_ptr<http::CURLSession> {
+ const gc_scoped_pool sp(pool(cp));
+ const int t = atoi(c_str((string)timeout(nilListValue)));
+ return new (gc_new<http::CURLSession>()) http::CURLSession(emptyString, emptyString, emptyString, emptyString, t);
+ };
+ 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 val = cadr(params);
+ const lvvlambda applyhttp = [url, val, ch](const list<value>& params) -> const value {
debug(params, "httpput::applyhttp::params");
const value func(car(params));
if (func == "get")
return get(url, val, *ch);
return mkfailure<value>();
- }
-
-private:
- const lambda<value(const list<value>&)> url;
- const lambda<value(const list<value>&)> val;
- perthread_ptr<http::CURLSession> ch;
-};
-
-/**
- * Create a new CURL session.
- */
-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(caddr(params))));
-
- // Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyhttp(car(params), cadr(params), ch)));
+ };
+ return value(applyhttp);
}
}