You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2012/05/28 06:39:22 UTC

svn commit: r1343138 [1/2] - in /tuscany/sca-cpp/trunk: components/cache/ components/chat/ components/constdb/ components/filedb/ components/http/ components/kvdb/ components/log/ components/queue/ components/smtp/ components/sqldb/ components/webservi...

Author: jsdelfino
Date: Mon May 28 04:39:18 2012
New Revision: 1343138

URL: http://svn.apache.org/viewvc?rev=1343138&view=rev
Log:
Improve error reporting with a reason code. Improve debug and audit logging. Fix test scripts to cleanup state from previous builds and correctly report test errors.

Added:
    tuscany/sca-cpp/trunk/modules/http/mod-security-audit-conf
      - copied, changed from r1311137, tuscany/sca-cpp/trunk/components/cache/memcached-stop
Modified:
    tuscany/sca-cpp/trunk/components/cache/Makefile.am
    tuscany/sca-cpp/trunk/components/cache/datacache.cpp
    tuscany/sca-cpp/trunk/components/cache/memcache.cpp
    tuscany/sca-cpp/trunk/components/cache/memcache.hpp
    tuscany/sca-cpp/trunk/components/cache/memcached-ssl-test
    tuscany/sca-cpp/trunk/components/cache/memcached-stop
    tuscany/sca-cpp/trunk/components/cache/memcached-test
    tuscany/sca-cpp/trunk/components/cache/partitioner.cpp
    tuscany/sca-cpp/trunk/components/cache/server-test
    tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp
    tuscany/sca-cpp/trunk/components/chat/chat-sender2.cpp
    tuscany/sca-cpp/trunk/components/chat/chat-sendreceiver.cpp
    tuscany/sca-cpp/trunk/components/chat/server-test
    tuscany/sca-cpp/trunk/components/chat/vysper-stop
    tuscany/sca-cpp/trunk/components/chat/xmpp.hpp
    tuscany/sca-cpp/trunk/components/constdb/constdb-test
    tuscany/sca-cpp/trunk/components/constdb/constdb.cpp
    tuscany/sca-cpp/trunk/components/constdb/server-test
    tuscany/sca-cpp/trunk/components/constdb/tinycdb.hpp
    tuscany/sca-cpp/trunk/components/filedb/filedb-test
    tuscany/sca-cpp/trunk/components/filedb/filedb.cpp
    tuscany/sca-cpp/trunk/components/filedb/filedb.hpp
    tuscany/sca-cpp/trunk/components/filedb/server-test
    tuscany/sca-cpp/trunk/components/http/httpdelete.cpp
    tuscany/sca-cpp/trunk/components/http/httpget.cpp
    tuscany/sca-cpp/trunk/components/http/httppatch.cpp
    tuscany/sca-cpp/trunk/components/http/httppost.cpp
    tuscany/sca-cpp/trunk/components/http/httpput.cpp
    tuscany/sca-cpp/trunk/components/http/server-test
    tuscany/sca-cpp/trunk/components/kvdb/kvdb-test
    tuscany/sca-cpp/trunk/components/kvdb/kvdb.cpp
    tuscany/sca-cpp/trunk/components/kvdb/leveldb.hpp
    tuscany/sca-cpp/trunk/components/kvdb/server-test
    tuscany/sca-cpp/trunk/components/log/log.composite
    tuscany/sca-cpp/trunk/components/log/log.cpp
    tuscany/sca-cpp/trunk/components/log/logger.cpp
    tuscany/sca-cpp/trunk/components/log/scribe-cat.cpp
    tuscany/sca-cpp/trunk/components/log/scribe-status.cpp
    tuscany/sca-cpp/trunk/components/log/scribe-tail-stop
    tuscany/sca-cpp/trunk/components/log/scribe.hpp
    tuscany/sca-cpp/trunk/components/log/scribed-central-stop
    tuscany/sca-cpp/trunk/components/log/scribed-client-stop
    tuscany/sca-cpp/trunk/components/log/server-test
    tuscany/sca-cpp/trunk/components/queue/qpidd-stop
    tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp
    tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp
    tuscany/sca-cpp/trunk/components/queue/server-test
    tuscany/sca-cpp/trunk/components/smtp/server-test
    tuscany/sca-cpp/trunk/components/smtp/smtppost.cpp
    tuscany/sca-cpp/trunk/components/sqldb/server-test
    tuscany/sca-cpp/trunk/components/sqldb/sqldb-test
    tuscany/sca-cpp/trunk/components/sqldb/sqldb.cpp
    tuscany/sca-cpp/trunk/components/sqldb/standby-test
    tuscany/sca-cpp/trunk/components/webservice/axis2.hpp
    tuscany/sca-cpp/trunk/components/webservice/server-test
    tuscany/sca-cpp/trunk/components/webservice/webservice-listener.cpp
    tuscany/sca-cpp/trunk/kernel/dynlib.hpp
    tuscany/sca-cpp/trunk/kernel/fstream.hpp
    tuscany/sca-cpp/trunk/kernel/gc.hpp
    tuscany/sca-cpp/trunk/kernel/kernel-test.cpp
    tuscany/sca-cpp/trunk/kernel/monad.hpp
    tuscany/sca-cpp/trunk/kernel/value.hpp
    tuscany/sca-cpp/trunk/kernel/xml.hpp
    tuscany/sca-cpp/trunk/modules/http/Makefile.am
    tuscany/sca-cpp/trunk/modules/http/http-test
    tuscany/sca-cpp/trunk/modules/http/http.hpp
    tuscany/sca-cpp/trunk/modules/http/httpd-test
    tuscany/sca-cpp/trunk/modules/http/httpd.hpp
    tuscany/sca-cpp/trunk/modules/http/mod-security-conf
    tuscany/sca-cpp/trunk/modules/http/proxy-test
    tuscany/sca-cpp/trunk/modules/java/mod-java.cpp
    tuscany/sca-cpp/trunk/modules/java/mod-java.hpp
    tuscany/sca-cpp/trunk/modules/java/server-test
    tuscany/sca-cpp/trunk/modules/java/wiring-test
    tuscany/sca-cpp/trunk/modules/js/eval.hpp
    tuscany/sca-cpp/trunk/modules/json/json.hpp
    tuscany/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp
    tuscany/sca-cpp/trunk/modules/oauth/mod-oauth2.cpp
    tuscany/sca-cpp/trunk/modules/oauth/start-mixed-test
    tuscany/sca-cpp/trunk/modules/oauth/start-test
    tuscany/sca-cpp/trunk/modules/opencl/eval.hpp
    tuscany/sca-cpp/trunk/modules/opencl/server-test
    tuscany/sca-cpp/trunk/modules/openid/start-test
    tuscany/sca-cpp/trunk/modules/python/mod-python.cpp
    tuscany/sca-cpp/trunk/modules/python/mod-python.hpp
    tuscany/sca-cpp/trunk/modules/python/server-test
    tuscany/sca-cpp/trunk/modules/python/wiring-test
    tuscany/sca-cpp/trunk/modules/scheme/json-value.cpp
    tuscany/sca-cpp/trunk/modules/scheme/value-json.cpp
    tuscany/sca-cpp/trunk/modules/scheme/value-xml.cpp
    tuscany/sca-cpp/trunk/modules/server/httpd-test
    tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp
    tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
    tuscany/sca-cpp/trunk/modules/server/server-test
    tuscany/sca-cpp/trunk/modules/server/wiring-test
    tuscany/sca-cpp/trunk/modules/wsgi/gae-stop
    tuscany/sca-cpp/trunk/modules/wsgi/http-test
    tuscany/sca-cpp/trunk/modules/wsgi/util-test
    tuscany/sca-cpp/trunk/modules/wsgi/wiring-test
    tuscany/sca-cpp/trunk/modules/wsgi/wsgi-stop
    tuscany/sca-cpp/trunk/modules/wsgi/wsgi-test
    tuscany/sca-cpp/trunk/samples/store-cluster/start
    tuscany/sca-cpp/trunk/samples/store-constdb/start
    tuscany/sca-cpp/trunk/samples/store-cpp/start
    tuscany/sca-cpp/trunk/samples/store-gae/server-test
    tuscany/sca-cpp/trunk/samples/store-java/start
    tuscany/sca-cpp/trunk/samples/store-python/start
    tuscany/sca-cpp/trunk/samples/store-scheme/start
    tuscany/sca-cpp/trunk/samples/store-sql/start
    tuscany/sca-cpp/trunk/samples/store-vhost/start

Modified: tuscany/sca-cpp/trunk/components/cache/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/Makefile.am?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/components/cache/Makefile.am Mon May 28 04:39:18 2012
@@ -54,4 +54,5 @@ client_test_LDFLAGS = -lxml2 -lcurl -lmo
 
 dist_noinst_SCRIPTS = memcached-test memcached-ssl-test server-test
 noinst_PROGRAMS = memcache-test client-test
-TESTS = memcached-test memcached-ssl-test server-test
+#TESTS = memcached-test memcached-ssl-test server-test
+TESTS = memcached-test server-test

Modified: tuscany/sca-cpp/trunk/components/cache/datacache.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/datacache.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/datacache.cpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/datacache.cpp Mon May 28 04:39:18 2012
@@ -56,7 +56,7 @@ const failable<value> get(const value& k
     if (isNil(val2)) {
         ostringstream os;
         os << "Couldn't get cache entry: " << key;
-        return mkfailure<value>(str(os), false);
+        return mkfailure<value>(str(os), 404, false);
     }
 
     // Update level1 cache

Modified: tuscany/sca-cpp/trunk/components/cache/memcache.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/memcache.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/memcache.cpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/memcache.cpp Mon May 28 04:39:18 2012
@@ -48,7 +48,7 @@ const failable<value> post(const list<va
     const value id = append<value>(car(params), mklist(mkuuid()));
     const failable<bool> val = memcache::post(id, cadr(params), ch);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return id;
 }
 
@@ -58,7 +58,7 @@ const failable<value> post(const list<va
 const failable<value> put(const list<value>& params, memcache::MemCached& ch) {
     const failable<bool> val = memcache::put(car(params), cadr(params), ch);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -68,7 +68,7 @@ const failable<value> put(const list<val
 const failable<value> del(const list<value>& params, memcache::MemCached& ch) {
     const failable<bool> val = memcache::del(car(params), ch);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -90,7 +90,7 @@ public:
             return put(cdr(params), ch);
         if (func == "delete")
             return del(cdr(params), ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/cache/memcache.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/memcache.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/memcache.hpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/memcache.hpp Mon May 28 04:39:18 2012
@@ -180,7 +180,7 @@ const failable<value> get(const value& k
     if (rc != APR_SUCCESS) {
         ostringstream os;
         os << "Couldn't get memcached entry: " << key;
-        return mkfailure<value>(str(os), false);
+        return mkfailure<value>(str(os), 404, false);
     }
     const value val(scheme::readValue(string(data, size)));
 

Modified: tuscany/sca-cpp/trunk/components/cache/memcached-ssl-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/memcached-ssl-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/memcached-ssl-test (original)
+++ tuscany/sca-cpp/trunk/components/cache/memcached-ssl-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/ssl-ca-conf tmp/ssl localhost
 ../../modules/http/ssl-cert-conf tmp/ssl localhost server
 ../../modules/http/ssl-cert-conf tmp/ssl localhost tunnel

Modified: tuscany/sca-cpp/trunk/components/cache/memcached-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/memcached-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/memcached-stop (original)
+++ tuscany/sca-cpp/trunk/components/cache/memcached-stop Mon May 28 04:39:18 2012
@@ -37,4 +37,8 @@ else
     mc="$memcached_prefix/bin/memcached -d -l $ip -m 4 -p $port"
 fi
 
-kill `ps -ef | grep -v grep | grep "${mc}" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${mc}" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
+

Modified: tuscany/sca-cpp/trunk/components/cache/memcached-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/memcached-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/memcached-test (original)
+++ tuscany/sca-cpp/trunk/components/cache/memcached-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ./memcached-start tmp 11211
 ./memcached-start tmp 11212
 ./memcached-start tmp 11213

Modified: tuscany/sca-cpp/trunk/components/cache/partitioner.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/partitioner.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/partitioner.cpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/partitioner.cpp Mon May 28 04:39:18 2012
@@ -47,7 +47,7 @@ const failable<lambda<value(const list<v
     if (isNil(p)) {
         ostringstream os;
         os << "Couldn't get partition number: " << key;
-        return mkfailure<lambda<value(const list<value>&)> >(str(os), false);
+        return mkfailure<lambda<value(const list<value>&)> >(str(os), -1, false);
     }
     return (const lambda<value(const list<value>&)>)p;
 }
@@ -60,14 +60,14 @@ const failable<value> get(const value& k
     // Select partition
     const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions);
     if (!hasContent(p))
-        return mkfailure<value>(reason(p));
+        return mkfailure<value>(p);
 
     // Get from selected partition
     const value val = content(p)(mklist<value>("get", key));
     if (isNil(val)) {
         ostringstream os;
         os << "Couldn't get entry from partition: " << key;
-        return mkfailure<value>(str(os), false);
+        return mkfailure<value>(str(os), 404, false);
     }
 
     return val;
@@ -82,7 +82,7 @@ const failable<value> post(const value& 
     // Select partition
     const failable<lambda<value(const list<value>&)> > p = partition(id, selector, partitions);
     if (!hasContent(p))
-        return mkfailure<value>(reason(p));
+        return mkfailure<value>(p);
 
     // Put into select partition
     content(p)(mklist<value>("put", id, val));
@@ -98,7 +98,7 @@ const failable<value> put(const value& k
     // Select partition
     const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions);
     if (!hasContent(p))
-        return mkfailure<value>(reason(p));
+        return mkfailure<value>(p);
 
     // Put into selected partition
     content(p)(mklist<value>("put", key, val));
@@ -114,7 +114,7 @@ const failable<value> del(const value& k
     // Select partition
     const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions);
     if (!hasContent(p))
-        return mkfailure<value>(reason(p));
+        return mkfailure<value>(p);
 
     // Delete from selected partition
     content(p)(mklist<value>("delete", key));

Modified: tuscany/sca-cpp/trunk/components/cache/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/server-test (original)
+++ tuscany/sca-cpp/trunk/components/cache/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp (original)
+++ tuscany/sca-cpp/trunk/components/chat/chat-sender.cpp Mon May 28 04:39:18 2012
@@ -46,7 +46,7 @@ const failable<value> post(const list<va
     debug(val, "chat::post::value");
     const failable<bool> r = post(to, val, xc);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
     return value(mklist<value>(to));
 }
 
@@ -96,7 +96,7 @@ public:
 
         // Stop the chat sender component
         if (func != "stop")
-            return tuscany::mkfailure<tuscany::value>();
+            return mkfailure<value>();
         debug("chat::sender::stop");
 
         // Disconnect and shutdown the worker thread
@@ -125,7 +125,7 @@ const failable<value> start(const list<v
     XMPPClient xc(jid, pass, false);
     const failable<bool> r = connect(xc);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
 
     // Listen and relay messages in a worker thread
     worker w(3);

Modified: tuscany/sca-cpp/trunk/components/chat/chat-sender2.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat-sender2.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat-sender2.cpp (original)
+++ tuscany/sca-cpp/trunk/components/chat/chat-sender2.cpp Mon May 28 04:39:18 2012
@@ -55,12 +55,12 @@ const failable<value> post(const lambda<
     XMPPClient xc(vjid, vpass);
     const failable<bool> c = connect(xc);
     if (!hasContent(c))
-        return mkfailure<value>(reason(c));
+        return mkfailure<value>(c);
 
     // Post the message
     const failable<bool> r = post(vto, vmsg, xc);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
     return value(mklist<value>(vto));
 }
 
@@ -79,7 +79,7 @@ public:
 
         // Stop the chat sender component
         if (func != "stop")
-            return tuscany::mkfailure<tuscany::value>();
+            return mkfailure<value>();
         debug("chat::sender::stop");
         return failable<value>(value(lambda<value(const list<value>&)>()));
     }

Modified: tuscany/sca-cpp/trunk/components/chat/chat-sendreceiver.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/chat-sendreceiver.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/chat-sendreceiver.cpp (original)
+++ tuscany/sca-cpp/trunk/components/chat/chat-sendreceiver.cpp Mon May 28 04:39:18 2012
@@ -46,7 +46,7 @@ const failable<value> post(const list<va
     debug(val, "chat::post::value");
     const failable<bool> r = post(to, val, xc);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
     return value(mklist<value>(to));
 }
 
@@ -107,7 +107,7 @@ public:
 
         // Stop the chat sender/receiver component
         if (func != "stop")
-            return tuscany::mkfailure<tuscany::value>();
+            return mkfailure<value>();
         debug("chat::sendreceiver::stop");
 
         // Disconnect and shutdown the worker thread
@@ -138,7 +138,7 @@ const failable<value> start(const list<v
     XMPPClient xc(jid, pass, false);
     const failable<bool> r = connect(xc);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
 
     // Listen and relay messages in a worker thread
     worker w(3);

Modified: tuscany/sca-cpp/trunk/components/chat/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/server-test (original)
+++ tuscany/sca-cpp/trunk/components/chat/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/chat/vysper-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/vysper-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/vysper-stop (original)
+++ tuscany/sca-cpp/trunk/components/chat/vysper-stop Mon May 28 04:39:18 2012
@@ -21,5 +21,8 @@
 here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
 
 java_prefix=`cat $here/../../modules/java/java.prefix`
-kill `ps -ef | grep -v grep | grep "${java_prefix}/jre/bin/java" | grep "vysper" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${java_prefix}/jre/bin/java" | grep "vysper" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
 

Modified: tuscany/sca-cpp/trunk/components/chat/xmpp.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/xmpp.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/xmpp.hpp (original)
+++ tuscany/sca-cpp/trunk/components/chat/xmpp.hpp Mon May 28 04:39:18 2012
@@ -291,7 +291,7 @@ const failable<bool> post(const value& t
     const failable<size_t> r = send(stanza, xc);
     xmpp_stanza_release(stanza);
     if (!hasContent(r))
-        return mkfailure<bool>(reason(r));
+        return mkfailure<bool>(r);
     return true;
 }
 
@@ -302,7 +302,7 @@ const failable<bool> disconnect(XMPPClie
     xc.disconnecting = true;
     const failable<size_t> r = send("</stream:stream>", xc);
     if (!hasContent(r))
-        return mkfailure<bool>(reason(r));
+        return mkfailure<bool>(r);
     return true;
 }
 

Modified: tuscany/sca-cpp/trunk/components/constdb/constdb-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/constdb/constdb-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/constdb/constdb-test (original)
+++ tuscany/sca-cpp/trunk/components/constdb/constdb-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 mkdir -p tmp
 ./tinycdb -c -m tmp/test.cdb </dev/null
 

Modified: tuscany/sca-cpp/trunk/components/constdb/constdb.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/constdb/constdb.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/constdb/constdb.cpp (original)
+++ tuscany/sca-cpp/trunk/components/constdb/constdb.cpp Mon May 28 04:39:18 2012
@@ -48,7 +48,7 @@ const failable<value> post(const list<va
     const value id = append<value>(car(params), mklist(mkuuid()));
     const failable<bool> val = tinycdb::post(id, cadr(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return id;
 }
 
@@ -58,7 +58,7 @@ const failable<value> post(const list<va
 const failable<value> put(const list<value>& params, tinycdb::TinyCDB& cdb) {
     const failable<bool> val = tinycdb::put(car(params), cadr(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -68,7 +68,7 @@ const failable<value> put(const list<val
 const failable<value> del(const list<value>& params, tinycdb::TinyCDB& cdb) {
     const failable<bool> val = tinycdb::del(car(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -90,7 +90,7 @@ public:
             return put(cdr(params), cdb);
         if (func == "delete")
             return del(cdr(params), cdb);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/constdb/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/constdb/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/constdb/server-test (original)
+++ tuscany/sca-cpp/trunk/components/constdb/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/constdb/tinycdb.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/constdb/tinycdb.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/constdb/tinycdb.hpp (original)
+++ tuscany/sca-cpp/trunk/components/constdb/tinycdb.hpp Mon May 28 04:39:18 2012
@@ -222,7 +222,7 @@ const failable<bool> rewrite(const lambd
     // Open existing db
     failable<int> ffd = cdbopen(cdb);
     if (!hasContent(ffd))
-        return mkfailure<bool>(reason(ffd));
+        return mkfailure<bool>(ffd);
     const int fd = content(ffd);
 
     // Read the db header
@@ -307,7 +307,7 @@ const failable<bool> rewrite(const lambd
     cdbclose(cdb);
     failable<int> ffd = cdbopen(cdb);
     if (!hasContent(ffd))
-        return mkfailure<bool>(reason(ffd));
+        return mkfailure<bool>(ffd);
 
     return true;
 }
@@ -413,7 +413,7 @@ const failable<value> get(const value& k
 
     const failable<int> ffd = cdbopen(cdb);
     if (!hasContent(ffd))
-        return mkfailure<value>(reason(ffd));
+        return mkfailure<value>(ffd);
     const int fd = content(ffd);
 
     const string ks(scheme::writeValue(key));
@@ -422,7 +422,7 @@ const failable<value> get(const value& k
     if (cdb_seek(fd, c_str(ks), (unsigned int)length(ks), &vlen) <= 0) {
         ostringstream os;
         os << "Couldn't get tinycdb entry: " << key;
-        return mkfailure<value>(str(os));
+        return mkfailure<value>(str(os), 404, false);
     }
     char* data = gc_cnew(vlen + 1);
     cdb_bread(fd, data, vlen);

Modified: tuscany/sca-cpp/trunk/components/filedb/filedb-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/filedb/filedb-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/filedb/filedb-test (original)
+++ tuscany/sca-cpp/trunk/components/filedb/filedb-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 mkdir -p tmp
 mkdir -p tmp/schemedb
 mkdir -p tmp/xmldb

Modified: tuscany/sca-cpp/trunk/components/filedb/filedb.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/filedb/filedb.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/filedb/filedb.cpp (original)
+++ tuscany/sca-cpp/trunk/components/filedb/filedb.cpp Mon May 28 04:39:18 2012
@@ -48,7 +48,7 @@ const failable<value> post(const list<va
     const value id = append<value>(car(params), mklist(mkuuid()));
     const failable<bool> val = filedb::post(id, cadr(params), db);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return id;
 }
 
@@ -58,7 +58,7 @@ const failable<value> post(const list<va
 const failable<value> put(const list<value>& params, filedb::FileDB& db) {
     const failable<bool> val = filedb::put(car(params), cadr(params), db);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -68,7 +68,7 @@ const failable<value> put(const list<val
 const failable<value> del(const list<value>& params, filedb::FileDB& db) {
     const failable<bool> val = filedb::del(car(params), db);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -90,7 +90,7 @@ public:
             return put(cdr(params), db);
         if (func == "delete")
             return del(cdr(params), db);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/filedb/filedb.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/filedb/filedb.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/filedb/filedb.hpp (original)
+++ tuscany/sca-cpp/trunk/components/filedb/filedb.hpp Mon May 28 04:39:18 2012
@@ -125,7 +125,7 @@ const failable<bool> write(const value& 
     if (format == "xml") {
         failable<list<string> > s = writeXML(valuesToElements(v));
         if (!hasContent(s))
-            return mkfailure<bool>(reason(s));
+            return mkfailure<bool>(s);
         write(content(s), os);
         return true;
     }
@@ -133,7 +133,7 @@ const failable<bool> write(const value& 
         js::JSContext jscx;
         failable<list<string> > s = json::writeJSON(valuesToElements(v), jscx);
         if (!hasContent(s))
-            return mkfailure<bool>(reason(s));
+            return mkfailure<bool>(s);
         write(content(s), os);
         return true;
     }
@@ -155,7 +155,7 @@ const failable<value> read(istream& is, 
         js::JSContext jscx;
         const failable<list<value> > fv = json::readJSON(streamList(is), jscx);
         if (!hasContent(fv))
-            return mkfailure<value>(reason(fv));
+            return mkfailure<value>(fv);
         const value v = elementsToValues(content(fv));
         return v;
     }
@@ -223,7 +223,7 @@ const failable<value> get(const value& k
     if (is.fail()) {
         ostringstream os;
         os << "Couldn't get file database entry: " << key;
-        return mkfailure<value>(str(os));
+        return mkfailure<value>(str(os), 404, false);
     }
     const failable<value> val = read(is, db.format);
 

Modified: tuscany/sca-cpp/trunk/components/filedb/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/filedb/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/filedb/server-test (original)
+++ tuscany/sca-cpp/trunk/components/filedb/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/http/httpdelete.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/httpdelete.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/httpdelete.cpp (original)
+++ tuscany/sca-cpp/trunk/components/http/httpdelete.cpp Mon May 28 04:39:18 2012
@@ -57,7 +57,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/http/httpget.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/httpget.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/httpget.cpp (original)
+++ tuscany/sca-cpp/trunk/components/http/httpget.cpp Mon May 28 04:39:18 2012
@@ -58,7 +58,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/http/httppatch.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/httppatch.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/httppatch.cpp (original)
+++ tuscany/sca-cpp/trunk/components/http/httppatch.cpp Mon May 28 04:39:18 2012
@@ -60,7 +60,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, val, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/http/httppost.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/httppost.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/httppost.cpp (original)
+++ tuscany/sca-cpp/trunk/components/http/httppost.cpp Mon May 28 04:39:18 2012
@@ -60,7 +60,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, val, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/http/httpput.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/httpput.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/httpput.cpp (original)
+++ tuscany/sca-cpp/trunk/components/http/httpput.cpp Mon May 28 04:39:18 2012
@@ -60,7 +60,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, val, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/http/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/http/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/http/server-test (original)
+++ tuscany/sca-cpp/trunk/components/http/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/server/server-conf tmp
 ../../modules/server/scheme-conf tmp

Modified: tuscany/sca-cpp/trunk/components/kvdb/kvdb-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/kvdb/kvdb-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/kvdb/kvdb-test (original)
+++ tuscany/sca-cpp/trunk/components/kvdb/kvdb-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 mkdir -p tmp
 ./tinycdb -c -m tmp/test.cdb </dev/null
 

Modified: tuscany/sca-cpp/trunk/components/kvdb/kvdb.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/kvdb/kvdb.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/kvdb/kvdb.cpp (original)
+++ tuscany/sca-cpp/trunk/components/kvdb/kvdb.cpp Mon May 28 04:39:18 2012
@@ -48,7 +48,7 @@ const failable<value> post(const list<va
     const value id = append<value>(car(params), mklist(mkuuid()));
     const failable<bool> val = leveldb::post(id, cadr(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return id;
 }
 
@@ -58,7 +58,7 @@ const failable<value> post(const list<va
 const failable<value> put(const list<value>& params, leveldb::LevelDB& cdb) {
     const failable<bool> val = leveldb::put(car(params), cadr(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -68,7 +68,7 @@ const failable<value> put(const list<val
 const failable<value> del(const list<value>& params, leveldb::LevelDB& cdb) {
     const failable<bool> val = leveldb::del(car(params), cdb);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -90,7 +90,7 @@ public:
             return put(cdr(params), cdb);
         if (func == "delete")
             return del(cdr(params), cdb);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/kvdb/leveldb.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/kvdb/leveldb.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/kvdb/leveldb.hpp (original)
+++ tuscany/sca-cpp/trunk/components/kvdb/leveldb.hpp Mon May 28 04:39:18 2012
@@ -157,8 +157,7 @@ const failable<int> dbopen(LevelDB& db) 
 	struct stat st;
 	const int s = stat(c_str(db.name), &st);
 	if (s == -1)
-		return mkfailure<int>(
-				string("Couldn't leveldb read database stat: ") + db.name);
+		return mkfailure<int>(string("Couldn't leveldb read database stat: ") + db.name);
 
 	leveldb::DB* ldb;
 	leveldb::Options options;

Modified: tuscany/sca-cpp/trunk/components/kvdb/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/kvdb/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/kvdb/server-test (original)
+++ tuscany/sca-cpp/trunk/components/kvdb/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/server/server-conf tmp
 ../../modules/server/scheme-conf tmp

Modified: tuscany/sca-cpp/trunk/components/log/log.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/log.composite?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/log.composite (original)
+++ tuscany/sca-cpp/trunk/components/log/log.composite Mon May 28 04:39:18 2012
@@ -23,6 +23,7 @@
         
     <component name="log">
         <implementation.cpp path="." library="liblog"/>
+        <property name="host"></property>
         <property name="category">default</property>
         <service name="log">
             <binding.http uri="log"/>
@@ -39,6 +40,7 @@
 
     <component name="logger">
         <implementation.cpp path="." library="liblogger"/>
+        <property name="host"></property>
         <property name="category">default</property>
         <service name="logger">
             <binding.http uri="logger"/>

Modified: tuscany/sca-cpp/trunk/components/log/log.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/log.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/log.cpp (original)
+++ tuscany/sca-cpp/trunk/components/log/log.cpp Mon May 28 04:39:18 2012
@@ -29,6 +29,7 @@
 #include "list.hpp"
 #include "value.hpp"
 #include "monad.hpp"
+#include "../../modules/http/http.hpp"
 #include "scribe.hpp"
 
 namespace tuscany {
@@ -37,11 +38,11 @@ namespace log {
 /**
  * Post an item to the Scribe log.
  */
-const failable<value> post(const list<value>& params, const value& category, scribe::Scribe& sc) {
+const failable<value> post(const list<value>& params, const value& host, const value& category, scribe::Scribe& sc) {
     debug(cadr(params), "log::post::value");
-    const failable<bool> val = scribe::log(cadr(params), category, sc);
+    const failable<bool> val = scribe::log(cadr(params), host, category, sc);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(mklist<value>(true));
 }
 
@@ -50,17 +51,18 @@ const failable<value> post(const list<va
  */
 class applyLog {
 public:
-    applyLog(const value& category, scribe::Scribe& sc) : category(category), sc(sc) {
+    applyLog(const value& host, const value& category, scribe::Scribe& sc) : host(host), category(category), sc(sc) {
     }
 
     const value operator()(const list<value>& params) const {
         const value func(car(params));
         if (func == "post")
-            return post(cdr(params), category, sc);
-        return tuscany::mkfailure<tuscany::value>();
+            return post(cdr(params), host, category, sc);
+        return mkfailure<value>();
     }
 
 private:
+    const value host;
     const value category;
     scribe::Scribe& sc;
 };
@@ -68,16 +70,18 @@ private:
 /**
  * Start the component.
  */
-const failable<value> start(unused const list<value>& params) {
+const failable<value> start(const list<value>& params) {
     // Connect to Scribe
     scribe::Scribe& sc = *(new (gc_new<scribe::Scribe>()) scribe::Scribe("localhost", 1464));
 
     // Extract the configured category
-    const value category = ((lambda<value(list<value>)>)car(params))(list<value>());
+    const value host = ((lambda<value(list<value>)>)car(params))(list<value>());
+    const value category = ((lambda<value(list<value>)>)cadr(params))(list<value>());
+    debug(host, "log::start::host");
     debug(category, "log::start::category");
 
     // Return the component implementation lambda function
-    return value(lambda<value(const list<value>&)>(applyLog(category, sc)));
+    return value(lambda<value(const list<value>&)>(applyLog(host, category, sc)));
 }
 
 }

Modified: tuscany/sca-cpp/trunk/components/log/logger.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/logger.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/logger.cpp (original)
+++ tuscany/sca-cpp/trunk/components/log/logger.cpp Mon May 28 04:39:18 2012
@@ -30,6 +30,7 @@
 #include "list.hpp"
 #include "value.hpp"
 #include "monad.hpp"
+#include "../../modules/http/http.hpp"
 #include "scribe.hpp"
 
 namespace tuscany {
@@ -40,24 +41,25 @@ namespace logger {
  */
 class applyLog {
 public:
-    applyLog(const lambda<value(const list<value>&)>& relay, const value& category, scribe::Scribe& sc) : relay(relay), category(category), sc(sc) {
+    applyLog(const lambda<value(const list<value>&)>& relay, const value& host, const value& category, scribe::Scribe& sc) : relay(relay), host(host), category(category), sc(sc) {
     }
 
     const value operator()(const list<value>& params) const {
         // Log the function params
         debug(params, "logger::apply::params");
-        scribe::log(params, category, sc);
+        scribe::log(params, host, category, sc);
 
-        // Relay the function
+        // Relay the function call
         const failable<value> res = relay(params);
 
         // Log the result
-        scribe::log(res, category, sc);
+        scribe::log(res, host, category, sc);
         return res;
     }
 
 private:
     const lambda<value(const list<value>&)> relay;
+    const value host;
     const value category;
     scribe::Scribe& sc;
 };
@@ -65,17 +67,19 @@ private:
 /**
  * Start the component.
  */
-const failable<value> start(unused const list<value>& params) {
+const failable<value> start(const list<value>& params) {
     // Connect to Scribe
     scribe::Scribe& sc = *(new (gc_new<scribe::Scribe>()) scribe::Scribe("localhost", 1464));
 
     // Extract the configured relay service and category
     const value rel = car(params);
-    const value category = ((lambda<value(list<value>)>)cadr(params))(list<value>());
+    const value host = ((lambda<value(list<value>)>)cadr(params))(list<value>());
+    const value category = ((lambda<value(list<value>)>)caddr(params))(list<value>());
+    debug(host, "logger::start::host");
     debug(category, "logger::start::category");
 
     // Return the component implementation lambda function
-    return value(lambda<value(const list<value>&)>(applyLog(rel, category, sc)));
+    return value(lambda<value(const list<value>&)>(applyLog(rel, host, category, sc)));
 }
 
 }

Modified: tuscany/sca-cpp/trunk/components/log/scribe-cat.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribe-cat.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribe-cat.cpp (original)
+++ tuscany/sca-cpp/trunk/components/log/scribe-cat.cpp Mon May 28 04:39:18 2012
@@ -47,7 +47,6 @@ int cat(const string& host, const string
 
         // Write line prefix
         ostringstream os;
-        os << "[" << host << "] ";
         if (length(type) != 0)
             os << "[" << logTime() << "] [" << type << "] ";
         const string prefix = str(os);
@@ -58,13 +57,14 @@ int cat(const string& host, const string
         const char* s = fgets(buf + pl, 8192 - pl, stdin);
         if (s == NULL)
             return 0;
+
+        // Remove trailing '\n'
         const size_t l = strlen(s);
-        if (l < 2)
-            return 0;
-        buf[pl + l - 1] = '\0';
+        if (l > 0)
+            buf[pl + l - 1] = '\0';
 
         // Log the line
-        const failable<bool> val = scribe::log(buf, category, sc);
+        const failable<bool> val = scribe::log(buf, host, category, sc);
         if (!hasContent(val))
             return 1;
     }

Modified: tuscany/sca-cpp/trunk/components/log/scribe-status.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribe-status.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribe-status.cpp (original)
+++ tuscany/sca-cpp/trunk/components/log/scribe-status.cpp Mon May 28 04:39:18 2012
@@ -45,7 +45,7 @@ const int status(const string& host, con
 
     // Interpret and display results
     if (!hasContent(fs)) {
-        cerr << reason(fs) << endl;
+        cerr << reason(fs) << " : " << rcode(fs) << endl;
         return 2;
     }
     const string s = content(fs);

Modified: tuscany/sca-cpp/trunk/components/log/scribe-tail-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribe-tail-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribe-tail-stop (original)
+++ tuscany/sca-cpp/trunk/components/log/scribe-tail-stop Mon May 28 04:39:18 2012
@@ -38,5 +38,8 @@ fi
 file=`echo "import os; print os.path.realpath('$file')" | python`
 
 cmd="tail -f -n 0 $file"
-kill `ps -ef | grep -v grep | grep "${cmd}" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${cmd}" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
 

Modified: tuscany/sca-cpp/trunk/components/log/scribe.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribe.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribe.hpp (original)
+++ tuscany/sca-cpp/trunk/components/log/scribe.hpp Mon May 28 04:39:18 2012
@@ -98,7 +98,7 @@ private:
     ::scribe::thrift::scribeClient* client;
     boost::shared_ptr<apache::thrift::transport::TTransport> transport;
 
-    friend const failable<bool> log(const value& val, const value& category, const Scribe& sc);
+    friend const failable<bool> log(const value& val, const string& host, const value& category, const Scribe& sc);
     friend const failable<string> status(const Scribe& sc);
 
     /**
@@ -122,18 +122,20 @@ private:
 /**
  * Log an item.
  */
-const failable<bool> log(const value& val, const value& category, const Scribe& sc) {
+const failable<bool> log(const value& val, const string& host, const value& category, const Scribe& sc) {
     debug(val, "scribe::log::value");
     debug(category, "scribe::log::category");
 
     const value cat = isString(category)? value(c_str(category)):category;
     const string cs(scheme::writeValue(cat));
     const string vs(scheme::writeValue(val));
+    ostringstream os;
+    os << "[" << host << "] " << vs;
 
     try {
         ::scribe::thrift::LogEntry entry;
         entry.category = c_str(cs);
-        entry.message = c_str(vs);
+        entry.message = c_str(str(os));
         std::vector< ::scribe::thrift::LogEntry> msgs;
         msgs.push_back(entry);
 

Modified: tuscany/sca-cpp/trunk/components/log/scribed-central-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribed-central-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribed-central-stop (original)
+++ tuscany/sca-cpp/trunk/components/log/scribed-central-stop Mon May 28 04:39:18 2012
@@ -25,4 +25,8 @@ scribe_prefix=`cat $here/scribe.prefix`
 thrift_prefix=`cat $here/thrift.prefix`
 scribed="$scribe_prefix/bin/scribed -c $root/scribe/conf/scribe-central.conf"
 
-kill `ps -ef | grep -v grep | grep "${scribed}" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${scribed}" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
+

Modified: tuscany/sca-cpp/trunk/components/log/scribed-client-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/scribed-client-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/scribed-client-stop (original)
+++ tuscany/sca-cpp/trunk/components/log/scribed-client-stop Mon May 28 04:39:18 2012
@@ -25,4 +25,8 @@ scribe_prefix=`cat $here/scribe.prefix`
 thrift_prefix=`cat $here/thrift.prefix`
 scribed="$scribe_prefix/bin/scribed -c $root/scribe/conf/scribe-client.conf"
 
-kill `ps -ef | grep -v grep | grep "${scribed}" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${scribed}" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
+

Modified: tuscany/sca-cpp/trunk/components/log/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/server-test (original)
+++ tuscany/sca-cpp/trunk/components/log/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/queue/qpidd-stop
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/qpidd-stop?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/qpidd-stop (original)
+++ tuscany/sca-cpp/trunk/components/queue/qpidd-stop Mon May 28 04:39:18 2012
@@ -23,4 +23,8 @@ here=`echo "import os; print os.path.rea
 qpid_prefix=`cat $here/qpidc.prefix`
 qpidd="$qpid_prefix/sbin/qpidd"
 
-kill `ps -ef | grep -v grep | grep "${qpidd}" | awk '{ print $2 }'`
+k=`ps -ef | grep -v grep | grep "${qpidd}" | awk '{ print $2 }'`
+if [ "$k" != "" ]; then
+    kill $k
+fi
+

Modified: tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp (original)
+++ tuscany/sca-cpp/trunk/components/queue/queue-listener.cpp Mon May 28 04:39:18 2012
@@ -97,7 +97,7 @@ public:
 
         // Stop the component
         if (func != "stop")
-            return tuscany::mkfailure<tuscany::value>();
+            return mkfailure<value>();
         debug("queue::listener::stop");
 
         // TODO check why stop() and close() hang in child processes

Modified: tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp (original)
+++ tuscany/sca-cpp/trunk/components/queue/queue-sender.cpp Mon May 28 04:39:18 2012
@@ -54,7 +54,7 @@ const failable<value> post(const list<va
     debug(cadr(params), "queue::post::value");
     const failable<bool> r = post(key, cadr(params), qs);
     if (!hasContent(r))
-        return mkfailure<value>(reason(r));
+        return mkfailure<value>(r);
     return key;
 }
 

Modified: tuscany/sca-cpp/trunk/components/queue/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/server-test (original)
+++ tuscany/sca-cpp/trunk/components/queue/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/smtp/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/smtp/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/smtp/server-test (original)
+++ tuscany/sca-cpp/trunk/components/smtp/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-loglevel-conf tmp debug
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/smtp/smtppost.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/smtp/smtppost.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/smtp/smtppost.cpp (original)
+++ tuscany/sca-cpp/trunk/components/smtp/smtppost.cpp Mon May 28 04:39:18 2012
@@ -42,14 +42,14 @@ const failable<value> post(const string&
     // Convert value to a content request
     const failable<list<list<string> > > freq = http::contentRequest(val, url);
     if (!hasContent(freq))
-        return mkfailure<value>(reason(freq));
+        return mkfailure<value>(freq);
     const list<list<string> > req = content(freq);
     debug(req, "smtp::post::input");
 
     // Setup the CURL session
     const failable<CURL*> fch = http::setup(url, cs);
     if (!hasContent(fch))
-        return mkfailure<value>(reason(fch));
+        return mkfailure<value>(fch);
     CURL* ch = content(fch);
     curl_easy_setopt(ch, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
 
@@ -129,7 +129,7 @@ public:
         const value func(car(params));
         if (func == "get")
             return get(url, user, pass, from, to, subject, val, *ch);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/sqldb/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/sqldb/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/sqldb/server-test (original)
+++ tuscany/sca-cpp/trunk/components/sqldb/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ./pgsql-conf tmp

Modified: tuscany/sca-cpp/trunk/components/sqldb/sqldb-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/sqldb/sqldb-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/sqldb/sqldb-test (original)
+++ tuscany/sca-cpp/trunk/components/sqldb/sqldb-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ./pgsql-conf tmp
 ./pgsql-start tmp
 ./pgsql "drop table test;" 1>/dev/null 2>&1

Modified: tuscany/sca-cpp/trunk/components/sqldb/sqldb.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/sqldb/sqldb.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/sqldb/sqldb.cpp (original)
+++ tuscany/sca-cpp/trunk/components/sqldb/sqldb.cpp Mon May 28 04:39:18 2012
@@ -49,7 +49,7 @@ const failable<value> post(const list<va
     const value id = append<value>(car(params), mklist(mkuuid()));
     const failable<bool> val = pgsql::post(id, cadr(params), pg);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return id;
 }
 
@@ -59,7 +59,7 @@ const failable<value> post(const list<va
 const failable<value> put(const list<value>& params, pgsql::PGSql& pg) {
     const failable<bool> val = pgsql::put(car(params), cadr(params), pg);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -69,7 +69,7 @@ const failable<value> put(const list<val
 const failable<value> del(const list<value>& params, pgsql::PGSql& pg) {
     const failable<bool> val = pgsql::del(car(params), pg);
     if (!hasContent(val))
-        return mkfailure<value>(reason(val));
+        return mkfailure<value>(val);
     return value(content(val));
 }
 
@@ -91,7 +91,7 @@ public:
             return put(cdr(params), *pg);
         if (func == "delete")
             return del(cdr(params), *pg);
-        return tuscany::mkfailure<tuscany::value>();
+        return mkfailure<value>();
     }
 
 private:

Modified: tuscany/sca-cpp/trunk/components/sqldb/standby-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/sqldb/standby-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/sqldb/standby-test (original)
+++ tuscany/sca-cpp/trunk/components/sqldb/standby-test Mon May 28 04:39:18 2012
@@ -18,12 +18,13 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp/master localhost 8090 tmp/master/htdocs
 ../../modules/http/httpd-event-conf tmp
 ./pgsql-conf tmp/master 5432
 ./pgsql-start tmp/master
-./pgsql localhost 5432 "drop table test;" 1>/dev/null 2>&1
-./pgsql localhost 5432 "create table test(key text, value text);" 1>/dev/null 2>&1
+./pgsql localhost 6432 "drop table test;" 1>/dev/null 2>&1
+./pgsql localhost 6432 "create table test(key text, value text);" 1>/dev/null 2>&1
 ../../modules/http/httpd-start tmp/master
 sleep 2
 ./pgsql-standby-conf tmp/standby 5433 localhost 5432 8090

Modified: tuscany/sca-cpp/trunk/components/webservice/axis2.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/webservice/axis2.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/webservice/axis2.hpp (original)
+++ tuscany/sca-cpp/trunk/components/webservice/axis2.hpp Mon May 28 04:39:18 2012
@@ -112,7 +112,7 @@ const failable<axiom_node_t*> stringToAx
 const failable<axiom_node_t*> valuesToAxiomNode(const list<value>& l, const Axis2Context& ax) {
     const failable<list<string> > xml = writeXML(valuesToElements(l), false);
     if (!hasContent(xml))
-        return mkfailure<axiom_node_t*>(reason(xml));
+        return mkfailure<axiom_node_t*>(xml);
     ostringstream os;
     write(content(xml), os);
     return stringToAxiomNode(str(os), ax);
@@ -136,7 +136,7 @@ const failable<const string> axiomNodeTo
 const failable<const list<value> > axiomNodeToValues(axiom_node_t* node, const Axis2Context& ax) {
     const failable<const string> s = axiomNodeToString(node, ax);
     if (!hasContent(s))
-        return mkfailure<const list<value> >(reason(s));
+        return mkfailure<const list<value> >(s);
     istringstream is(content(s));
     const failable<const list<value> > l = readXML(streamList(is));
     if (!hasContent(l))
@@ -170,7 +170,7 @@ const failable<value> evalExpr(const val
     // Construct request Axiom node
     const failable<axiom_node_t*> req = valuesToAxiomNode(param, ax);
     if (!hasContent(req))
-        return mkfailure<value>(reason(req));
+        return mkfailure<value>(req);
 
     // Call the Web service
     axiom_node_t* res = axis2_svc_client_send_receive(client, env(ax), content(req));
@@ -182,7 +182,7 @@ const failable<value> evalExpr(const val
     // Parse result Axiom node
     const failable<const list<value> > lval = axiomNodeToValues(res, ax);
     if (!hasContent(lval))
-        return mkfailure<value>(reason(lval));
+        return mkfailure<value>(lval);
     const value rval = content(lval);
     debug(rval, "webservice::evalExpr::result");
 

Modified: tuscany/sca-cpp/trunk/components/webservice/server-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/webservice/server-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/webservice/server-test (original)
+++ tuscany/sca-cpp/trunk/components/webservice/server-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
 ../../modules/http/httpd-event-conf tmp
 ../../modules/server/server-conf tmp

Modified: tuscany/sca-cpp/trunk/components/webservice/webservice-listener.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/webservice/webservice-listener.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/webservice/webservice-listener.cpp (original)
+++ tuscany/sca-cpp/trunk/components/webservice/webservice-listener.cpp Mon May 28 04:39:18 2012
@@ -47,7 +47,7 @@ extern "C" {
 const value redirectToAxis2(const string& uri, request_rec* r, const value& relay) {
     const failable<request_rec*, int> nr = httpd::internalRedirectRequest(uri, r);
     if (!hasContent(nr))
-        return value(reason(nr));
+        return value(reason(nr), rcode(nr));
     ap_set_module_config(content(nr)->request_config, &axis2_module, const_cast<void*>((const void*)&relay));
     return value(httpd::internalRedirect(content(nr)));
 }

Modified: tuscany/sca-cpp/trunk/kernel/dynlib.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/dynlib.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/dynlib.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/dynlib.hpp Mon May 28 04:39:18 2012
@@ -80,7 +80,7 @@ private:
  */
 template<typename S> const failable<lambda<S> > dynlambda(const string& name, const lib& l) {
     if (!hasContent(l.h))
-        return mkfailure<lambda<S> >(reason(l.h));
+        return mkfailure<lambda<S>>(l.h);
     const void* s = dlsym(content(l.h), c_str(name));
     if (s == NULL)
         return mkfailure<lambda<S> >(string("Could not load symbol: ") + name);

Modified: tuscany/sca-cpp/trunk/kernel/fstream.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/fstream.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/fstream.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/fstream.hpp Mon May 28 04:39:18 2012
@@ -329,7 +329,17 @@ logfstream cdebug(stderr, "debug");
 /**
  * Return true if debug log is enabled.
  */
-#define debug_islogging() true
+bool debug_isLoggingSet = false;
+bool debug_isLoggingEnv = false;
+
+const bool debug_isLogging() {
+    if (debug_isLoggingSet)
+        return debug_isLoggingEnv;
+    debug_isLoggingEnv = getenv("TUSCANY_DEBUG_LOG") != NULL;
+    return debug_isLoggingEnv;
+}
+
+#define debug_islogging() debug_isLogging()
 
 #endif
 
@@ -355,7 +365,16 @@ template<typename V> const bool debugLog
     return true;
 }
 
-#define debug(...) if (debug_islogging()) tuscany::debugLog(__VA_ARGS__)
+/**
+ * Log a debug message and two values.
+ */
+template<typename V, typename W> const bool debugLog(const V& v, const W& w, const string& msg) {
+    gc_scoped_pool();
+    cdebug << msg << ": " << v << " : " << w << endl;
+    return true;
+}
+
+#define debug(...) do { if (debug_islogging()) tuscany::debugLog(__VA_ARGS__); } while(0)
 
 #else
 

Modified: tuscany/sca-cpp/trunk/kernel/gc.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/gc.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/gc.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/gc.hpp Mon May 28 04:39:18 2012
@@ -26,6 +26,7 @@
  * Garbage collected memory management, using APR memory pools.
  */
 
+#include "config.hpp"
 #ifdef WANT_MALLOC_MMAP
 #include <sys/mman.h>
 #include <malloc.h>
@@ -36,7 +37,6 @@
 #include <apr_strings.h>
 #include <assert.h>
 #include <new>
-#include "config.hpp"
 #ifdef WANT_THREADS
 #include <pthread.h>
 #endif
@@ -267,7 +267,7 @@ public:
     }
 
 private:
-    gc_scoped_pool(const unused gc_scoped_pool& pool) : gc_pool(pool.apr_pool), prev(NULL), owner(false) {
+    gc_scoped_pool(const gc_scoped_pool& pool) : gc_pool(pool.apr_pool), prev(NULL), owner(false) {
     }
 
     apr_pool_t* prev;

Modified: tuscany/sca-cpp/trunk/kernel/kernel-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/kernel-test.cpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/kernel-test.cpp (original)
+++ tuscany/sca-cpp/trunk/kernel/kernel-test.cpp Mon May 28 04:39:18 2012
@@ -501,13 +501,23 @@ const failable<int> failableH(const int 
 bool testFailableMonad() {
     const failable<int> m(2);
     assert(m >> failableF == failableF(2));
-    assert((m >> success<int, string>()) == m);
+    assert((m >> success<int, string, int>()) == m);
     assert(m >> failableF >> failableG == m >> failableH);
 
     cout << "Failable monad test... " << endl;
-    failable<int> ooops = mkfailure<int>("test");
+    const failable<int> ooops = mkfailure<int>("test", 500);
     assert(reason(ooops) == "test");
+    assert(rcode(ooops) == 500);
     assert(ooops >> failableF >> failableG == ooops);
+
+    const failable<value> vooops = mkfailure<value>(ooops);
+    assert(reason(vooops) == "test");
+    assert(rcode(vooops) == 500);
+
+    const value v = value(vooops);
+    assert(car<value>(v) == value());
+    assert(cadr<value>(v) == string("test"));
+    assert(caddr<value>(v) == value((double)500));
     return true;
 }
 

Modified: tuscany/sca-cpp/trunk/kernel/monad.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/monad.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/monad.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/monad.hpp Mon May 28 04:39:18 2012
@@ -203,59 +203,63 @@ template<typename R, typename V> const m
  * To get the value in the monad, just cast it to the value type.
  * To get the failure in the monad, cast it to the failure type.
  */
-template<typename V, typename F = string> class failable {
+template<typename V, typename F = string, typename C = int> class failable {
 public:
-    failable() : hasv(false) {
+    failable() : hasv(false), c(-1) {
     }
 
-    failable(const V& v) : hasv(true), v(v) {
+    failable(const V& v) : hasv(true), v(v), c(-1) {
     }
 
-    failable(const failable<V, F>& m) : hasv(m.hasv), v(m.v), f(m.f) {
+    failable(const failable<V, F, C>& m) : hasv(m.hasv), v(m.v), f(m.f), c(m.c) {
     }
 
-    const failable<V, F>& operator=(const failable<V, F>& m) {
+    const failable<V, F, C>& operator=(const failable<V, F, C>& m) {
         if (&m == this)
             return *this;
         hasv = m.hasv;
         v = m.v;
         f = m.f;
+        c = m.c;
         return *this;
     }
 
-    const bool operator!=(const failable<V, F>& m) const {
+    const bool operator!=(const failable<V, F, C>& m) const {
         return !this->operator==(m);
     }
 
-    const bool operator==(const failable<V, F>& m) const {
+    const bool operator==(const failable<V, F, C>& m) const {
         if (this == &m)
             return true;
         if (!hasv)
-            return !m.hasv && f == m.f;
+            return !m.hasv && f == m.f && c == m.c;
         return m.hasv && v == m.v;
     }
 
 private:
-    failable(const bool hasv, const F& f) : hasv(hasv), f(f) {
+    failable(const bool hasv, const F& f, const C& c) : hasv(hasv), f(f), c(c) {
     }
 
-    template<typename A, typename B> friend const bool hasContent(const failable<A, B>& m);
-    template<typename A, typename B> friend const A content(const failable<A, B>& m);
-    template<typename A, typename B> friend const B reason(const failable<A, B>& m);
-    template<typename A, typename B> friend const failable<A, B> mkfailure(const B& f, const bool log);
-    template<typename A> friend const failable<A, string> mkfailure();
+    template<typename A, typename B, typename R> friend const bool hasContent(const failable<A, B, R>& m);
+    template<typename A, typename B, typename R> friend const A content(const failable<A, B, R>& m);
+    template<typename A, typename B, typename R> friend const B reason(const failable<A, B, R>& m);
+    template<typename A, typename B, typename R> friend const R rcode(const failable<A, B, R>& m);
+    template<typename A, typename B, typename R> friend const failable<A, B, R> mkfailure(const B& f, const R& c, const bool log);
+    template<typename A, typename B> friend const failable<A, B> mkfailure(const B& f, const int c, const bool log);
+    template<typename A> friend const failable<A> mkfailure();
 
     bool hasv;
     V v;
     F f;
+    C c;
 };
 
 /**
  * Write a failable monad to a stream.
  */
-template<typename V, typename F> ostream& operator<<(ostream& out, const failable<V, F>& m) {
+template<typename V, typename F, typename C> ostream& operator<<(ostream& out, const failable<V, F, C>& m) {
     if (!hasContent(m)) {
-        out << reason(m);
+        out << reason(m) << " : " << rcode(m);
         return out;
     }
     out << content(m);
@@ -265,18 +269,18 @@ template<typename V, typename F> ostream
 /**
  * Returns a failable monad with a success value in it.
  */
-template<typename V, typename F> const failable<V, F> mksuccess(const V& v) {
-    return failable<V, F>(v);
+template<typename V, typename F, typename C> const failable<V, F, C> mksuccess(const V& v) {
+    return failable<V, F, C>(v);
 }
 
-template<typename V, typename F> const lambda<failable<V, F>(const V)> success() {
-    return mksuccess<V, F>;
+template<typename V, typename F, typename C> const lambda<failable<V, F, C>(const V)> success() {
+    return mksuccess<V, F, C>;
 }
 
 /**
  * Returns a failable monad with a failure in it.
  */
-template<typename V, typename F> const failable<V, F> mkfailure(const F& f, const bool log = true) {
+template<typename V, typename F, typename C> const failable<V, F, C> mkfailure(const F& f, const C& c, const bool log = true) {
 #ifdef WANT_MAINTAINER_LOG
     if (!log)
         debug(f, "failable::mkfailure");
@@ -285,57 +289,85 @@ template<typename V, typename F> const f
         ostringstream os;
         os << f;
         if (length(str(os)) != 0)
-            cfailure << "failable::mkfailure" << ": " << f << endl;
+            cfailure << "failable::mkfailure" << ": " << f << " : " << c << endl;
     }
-    return failable<V, F>(false, f);
+    return failable<V, F, C>(false, f, c);
 }
 
-template<typename V> const failable<V> mkfailure(const char* f, const bool log = true) {
-    return mkfailure<V, string>(string(f), log);
+template<typename V, typename F> const failable<V, F> mkfailure(const F& f, const int c = -1, const bool log = true) {
+#ifdef WANT_MAINTAINER_LOG
+    if (!log)
+        debug(f, c, "failable::mkfailure");
+#endif
+    if (log) {
+        ostringstream os;
+        os << f;
+        if (length(str(os)) != 0)
+            cfailure << "failable::mkfailure: " << str(os) << " : " << c << endl;
+    }
+    return failable<V, F>(false, f, c);
+}
+
+template<typename V> const failable<V> mkfailure(const char* f, const int c = -1, const bool log = true) {
+    return mkfailure<V, string>(string(f), c, log);
 }
 
 template<typename V> const failable<V> mkfailure() {
-    return failable<V, string>(false, string());
+    return failable<V, string>(false, string(), -1);
+}
+
+template<typename V, typename F, typename C> const lambda<failable<V, F, C>(const V)> failure() {
+    return mkfailure<V, F, C>;
 }
 
-template<typename V, typename F> const lambda<failable<V, F>(const V)> failure() {
-    return mkfailure<V, F>;
+/**
+ * Convert a failable of a given type to a failable of another type.
+ */
+template<typename V, typename F, typename C, typename X> const failable<V, F, C> mkfailure(const failable<X, F, C>& f, const bool log = true) {
+    return mkfailure<V, F, C>(reason(f), rcode(f), log);
 }
 
 /**
  * Returns true if the monad contains a content.
  */
-template<typename V, typename F> const bool hasContent(const failable<V, F>& m) {
+template<typename V, typename F, typename C> const bool hasContent(const failable<V, F, C>& m) {
     return m.hasv;
 }
 
 /**
  * Returns the content of a failable monad.
  */
-template<typename V, typename F> const V content(const failable<V, F>& m) {
+template<typename V, typename F, typename C> const V content(const failable<V, F, C>& m) {
     return m.v;
 }
 
 /**
  * Returns the reason for failure of a failable monad.
  */
-template<typename V, typename F> const F reason(const failable<V, F>& m) {
+template<typename V, typename F, typename C> const F reason(const failable<V, F, C>& m) {
     return m.f;
 }
 
 /**
+ * Returns the reason code for failure of a failable monad.
+ */
+template<typename V, typename F, typename C> const C rcode(const failable<V, F, C>& m) {
+    return m.c;
+}
+
+/**
  * Bind a function to a failable monad. Passes the success value in the monad to the function
  * if present, or does nothing if there's no value and a failure instead.
  */
-template<typename R, typename FR, typename V, typename FV>
-const failable<R, FR> operator>>(const failable<V, FV>& m, const lambda<failable<R, FR>(const V)>& f) {
+template<typename R, typename FR, typename XR, typename V, typename FV, typename XV>
+const failable<R, FR, XR> operator>>(const failable<V, FV, XV>& m, const lambda<failable<R, FR, XR>(const V)>& f) {
     if (!hasContent(m))
         return m;
     return f(content(m));
 }
 
-template<typename R, typename FR, typename V, typename FV>
-const failable<R, FR> operator>>(const failable<V, FV>& m, const failable<R, FR> (* const f)(const V)) {
+template<typename R, typename FR, typename XR, typename V, typename FV, typename XV>
+const failable<R, FR, XR> operator>>(const failable<V, FV, XV>& m, const failable<R, FR, XR> (* const f)(const V)) {
     if (!hasContent(m))
         return m;
     return f(content(m));

Modified: tuscany/sca-cpp/trunk/kernel/value.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/value.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/value.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/value.hpp Mon May 28 04:39:18 2012
@@ -193,7 +193,7 @@ public:
     }
 
     value(const failable<value>& m) : type(value::List),
-        data(vdata(result(hasContent(m)? mklist<value>(content(m)) : mklist<value>(value(), reason(m))))) {
+        data(vdata(result(hasContent(m)? mklist<value>(content(m)) : rcode(m) == 1? mklist<value>(value(), reason(m)) : mklist<value>(value(), reason(m), rcode(m))))) {
         debug_inc(countValues);
         debug_inc(countVValues);
         debug_watchValue();

Modified: tuscany/sca-cpp/trunk/kernel/xml.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/xml.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/xml.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/xml.hpp Mon May 28 04:39:18 2012
@@ -321,7 +321,7 @@ const failable<bool> writeList(const lis
 const failable<bool> write(const list<value>& l, const xmlTextWriterPtr xml, bool xmlTag) {
     if (xmlTag) {
         if (xmlTextWriterStartDocument(xml, NULL, encoding, NULL) < 0)
-            return mkfailure<bool>(string("xmlTextWriterStartDocument failed"));
+            return mkfailure<bool>("xmlTextWriterStartDocument failed");
     }
 
     const failable<bool> w = writeList(l, xml);
@@ -371,7 +371,7 @@ template<typename R> const failable<R> w
     const failable<bool> w = write(l, xml, xmlTag);
     xmlFreeTextWriter(xml);
     if (!hasContent(w)) {
-        return mkfailure<R>(reason(w));
+        return mkfailure<R>(w);
     }
     return cx.accum;
 }

Modified: tuscany/sca-cpp/trunk/modules/http/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/Makefile.am?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/modules/http/Makefile.am Mon May 28 04:39:18 2012
@@ -76,7 +76,7 @@ if WANT_MODSECURITY
 modsecurity.prefix: $(top_builddir)/config.status
 	echo ${MODSECURITY_PREFIX} >modsecurity.prefix
 
-dist_modsecurity_SCRIPTS = mod-security-conf
+dist_modsecurity_SCRIPTS = mod-security-conf mod-security-audit-conf
 modsecurity_DATA = modsecurity.prefix
 modsecuritydir = $(prefix)/modules/http
 

Modified: tuscany/sca-cpp/trunk/modules/http/http-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/http-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/http-test (original)
+++ tuscany/sca-cpp/trunk/modules/http/http-test Mon May 28 04:39:18 2012
@@ -18,6 +18,7 @@
 #  under the License.
 
 # Setup
+rm -rf tmp
 ./httpd-conf tmp localhost 8090 htdocs
 ./httpd-event-conf tmp
 ./httpd-start tmp

Modified: tuscany/sca-cpp/trunk/modules/http/http.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/http.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/http.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/http/http.hpp Mon May 28 04:39:18 2012
@@ -371,7 +371,7 @@ template<typename R> const failable<list
     // Setup the CURL session
     const failable<CURL*> fch = setup(url, cs);
     if (!hasContent(fch))
-        return mkfailure<list<R>>(reason(fch));
+        return mkfailure<list<R>>(fch);
     CURL* ch = content(fch);
 
     // Set the request headers
@@ -440,19 +440,19 @@ const failable<value> evalExpr(const val
     js::JSContext cx;
     const failable<list<string> > jsreq = json::jsonRequest(1, car<value>(expr), cdr<value>(expr), cx);
     if (!hasContent(jsreq))
-        return mkfailure<value>(reason(jsreq));
+        return mkfailure<value>(jsreq);
 
     // POST it to the URL
     const list<string> h = mklist<string>("Content-Type: application/json-rpc");
     const failable<list<list<string> > > res = apply<list<string> >(mklist<list<string> >(h, content(jsreq)), rcons<string>, list<string>(), url, "POST", cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     // Parse and return JSON-RPC result
     const failable<value> rval = json::jsonResultValue(cadr<list<string> >(content(res)), cx);
     debug(rval, "http::evalExpr::result");
     if (!hasContent(rval))
-        return mkfailure<value>(reason(rval));
+        return mkfailure<value>(rval);
     return content(rval);
 }
 
@@ -513,7 +513,7 @@ const failable<value> getcontent(const s
     // Get the contents of the resource at the given URL
     const failable<list<list<string> > > res = get<list<string>>(rcons<string>, list<string>(), url, cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
     const list<string> ls(reverse(cadr(content(res))));
 
     // Return the content as a list of values
@@ -597,7 +597,7 @@ const failable<value> get(const string& 
     // Get the contents of the resource at the given URL
     const failable<list<list<string> > > res = get<list<string> >(rcons<string>, list<string>(), url, cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     // Parse the returned content
     return responseValue(content(res));
@@ -608,7 +608,7 @@ const failable<value> get(const string& 
  */
 const failable<list<list<string> > > writeRequest(const failable<list<string> >& ls, const string& ct) {
     if (!hasContent(ls))
-        return mkfailure<list<list<string> > >(reason(ls));
+        return mkfailure<list<list<string> > >(ls);
     const list<list<string> > req =  mklist<list<string> >(mklist<string>(string("Content-Type: ") + ct), content(ls));
     debug(req, "http::writeRequest::req");
     return req;
@@ -695,13 +695,13 @@ const failable<value> post(const value& 
     // Convert value to a content request
     const failable<list<list<string> > > req = contentRequest(val, url);
     if (!hasContent(req))
-        return mkfailure<value>(reason(req));
+        return mkfailure<value>(req);
     debug(content(req), "http::post::input");
 
     // POST it to the URL
     const failable<list<list<string> > > res = apply<list<string>>(content(req), rcons<string>, list<string>(), url, "POST", cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     // Return the new entry id from the HTTP location header, if any
     const string loc = location(car(content(res)));
@@ -724,13 +724,13 @@ const failable<value> put(const value& v
     // Convert value to a content request
     const failable<list<list<string> > > req = contentRequest(val, url);
     if (!hasContent(req))
-        return mkfailure<value>(reason(req));
+        return mkfailure<value>(req);
     debug(content(req), "http::put::input");
 
     // PUT it to the URL
     const failable<list<list<string> > > res = apply<list<string> >(content(req), rcons<string>, list<string>(), url, "PUT", cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     debug(true, "http::put::result");
     return value(true);
@@ -745,13 +745,13 @@ const failable<value> patch(const value&
     // Convert value to a content request
     const failable<list<list<string> > > req = contentRequest(val, url);
     if (!hasContent(req))
-        return mkfailure<value>(reason(req));
+        return mkfailure<value>(req);
     debug(content(req), "http::patch::input");
 
     // PATCH it to the URL
     const failable<list<list<string> > > res = apply<list<string> >(content(req), rcons<string>, list<string>(), url, "PATCH", cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     debug(true, "http::patch::result");
     return value(true);
@@ -766,7 +766,7 @@ const failable<value, string> del(const 
     const list<list<string> > req = mklist(list<string>(), list<string>());
     const failable<list<list<string> > > res = apply<list<string> >(req, rcons<string>, list<string>(), url, "DELETE", cs);
     if (!hasContent(res))
-        return mkfailure<value>(reason(res));
+        return mkfailure<value>(res);
 
     debug(true, "http::delete::result");
     return value(true);
@@ -805,7 +805,7 @@ const failable<bool> connect(const strin
     // Setup the CURL session
     const failable<CURL*> fch = setup(url, cs);
     if (!hasContent(fch))
-        return mkfailure<bool>(reason(fch));
+        return mkfailure<bool>(fch);
     CURL* ch = content(fch);
 
     // Connect

Modified: tuscany/sca-cpp/trunk/modules/http/httpd-test
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/httpd-test?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/httpd-test (original)
+++ tuscany/sca-cpp/trunk/modules/http/httpd-test Mon May 28 04:39:18 2012
@@ -22,6 +22,7 @@ here=`echo "import os; print os.path.rea
 curl_prefix=`cat $here/../http/curl.prefix`
 
 # Setup
+rm -rf tmp
 ./httpd-conf tmp localhost 8090 htdocs
 ./httpd-event-conf tmp
 ./httpd-start tmp

Modified: tuscany/sca-cpp/trunk/modules/http/httpd.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/httpd.hpp?rev=1343138&r1=1343137&r2=1343138&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/httpd.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/http/httpd.hpp Mon May 28 04:39:18 2012
@@ -402,7 +402,7 @@ const list<string> read(request_rec* r) 
  */
 const failable<int> writeResult(const failable<list<string> >& ls, const string& ct, request_rec* r) {
     if (!hasContent(ls))
-        return mkfailure<int>(reason(ls));
+        return mkfailure<int>(ls);
     ostringstream os;
     write(content(ls), os);
     const string ob(str(os));
@@ -437,8 +437,10 @@ const failable<int> writeResult(const fa
  */
 const int reportStatus(const failable<int>& rc) {
     debug(rc, "httpd::reportStatus::rc");
-    if (!hasContent(rc))
-        return HTTP_INTERNAL_SERVER_ERROR;
+    if (!hasContent(rc)) {
+        const int r = rcode(rc);
+        return r == -1 ? HTTP_INTERNAL_SERVER_ERROR : r;
+    }
     return content(rc);
 }
 
@@ -725,7 +727,7 @@ const bool debugRequest(request_rec* r, 
     return true;
 }
 
-#define debug_httpdRequest(r, msg) if (debug_islogging()) httpd::debugRequest(r, msg)
+#define debug_httpdRequest(r, msg) do { if (debug_islogging()) httpd::debugRequest(r, msg); } while(0)
 
 #else