summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/server/mod-eval.hpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-01-30 08:06:00 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-01-30 08:06:00 +0000
commitc06d7a38b904247917462c3c1a780f95c68e0709 (patch)
tree09e734786aa4aa710b7248921185f9ace9454078 /sca-cpp/trunk/modules/server/mod-eval.hpp
parenteb644871fca453fbc7de6dc6746eade97cb3a848 (diff)
Added a Web service listener component integrating Axis2/C's mod_axis2. Consolidated a bit the HTTPD redirect functions (used to redirect to mod_axis2.) Minor updates to the README and INSTALL files.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@904733 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sca-cpp/trunk/modules/server/mod-eval.hpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/sca-cpp/trunk/modules/server/mod-eval.hpp b/sca-cpp/trunk/modules/server/mod-eval.hpp
index aaf31f2b18..b622283fed 100644
--- a/sca-cpp/trunk/modules/server/mod-eval.hpp
+++ b/sca-cpp/trunk/modules/server/mod-eval.hpp
@@ -129,13 +129,18 @@ const failable<int> get(request_rec* r, const lambda<value(const list<value>&)>&
* Handle an HTTP POST.
*/
const failable<int> post(request_rec* r, const lambda<value(const list<value>&)>& impl) {
- const list<string> ls = httpd::read(r);
debug(r->uri, "modeval::post::url");
- debug(ls, "modeval::post::input");
// Evaluate a JSON-RPC request and return a JSON result
const string ct = httpd::contentType(r);
if (contains(ct, "application/json-rpc") || contains(ct, "text/plain")) {
+
+ // Read the JSON request
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::post::input");
json::JSONContext cx;
const list<value> json = elementsToValues(content(json::readJSON(ls, cx)));
const list<list<value> > args = httpd::postArgs(json);
@@ -157,8 +162,15 @@ const failable<int> post(request_rec* r, const lambda<value(const list<value>&)>
// Evaluate an ATOM POST request and return the location of the corresponding created resource
if (contains(ct, "application/atom+xml")) {
- // Evaluate the request expression
+ // Read the ATOM entry
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::post::input");
const value entry = atom::entryValue(content(atom::readEntry(ls)));
+
+ // Evaluate the request expression
const failable<value> val = failableResult(impl(cons<value>("post", mklist<value>(entry))));
if (!hasContent(val))
return mkfailure<int>(reason(val));
@@ -174,20 +186,25 @@ const failable<int> post(request_rec* r, const lambda<value(const list<value>&)>
const failable<value> val = failableResult(impl(cons<value>("handle", mklist<value>(httpd::requestValue(r)))));
if (!hasContent(val))
return mkfailure<int>(reason(val));
- return OK;
+ return (int)content(val);
}
/**
* Handle an HTTP PUT.
*/
const failable<int> put(request_rec* r, const lambda<value(const list<value>&)>& impl) {
- const list<string> ls = httpd::read(r);
debug(r->uri, "modeval::put::url");
- debug(ls, "modeval::put::input");
- // Evaluate an ATOM PUT request and update the corresponding resource
+ // Read the ATOM entry
const list<value> path(httpd::pathValues(r->uri));
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::put::input");
const value entry = atom::entryValue(content(atom::readEntry(ls)));
+
+ // Evaluate the ATOM PUT request and update the corresponding resource
const failable<value> val = failableResult(impl(cons<value>("put", mklist<value>(caddr(path), entry))));
if (!hasContent(val))
return mkfailure<int>(reason(val));
@@ -244,11 +261,6 @@ int handler(request_rec *r) {
return DECLINED;
httpdDebugRequest(r, "modeval::handler::input");
- // Set up the read policy
- const int rc = httpd::setupReadPolicy(r);
- if(rc != OK)
- return rc;
-
// Get the component implementation lambda
DirConf& dc = httpd::dirConf<DirConf>(r, &mod_tuscany_eval);
const list<value> path(httpd::pathValues(r->uri));