diff options
Diffstat (limited to 'sca-cpp/trunk/components/http')
-rw-r--r-- | sca-cpp/trunk/components/http/Makefile.am | 12 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/client-test.cpp | 33 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/httpdelete.cpp | 57 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/httpget.cpp | 58 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/httppatch.cpp | 61 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/httppost.cpp | 61 | ||||
-rw-r--r-- | sca-cpp/trunk/components/http/httpput.cpp | 61 |
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); } } |