Remove SENFSCons.StandardTargets and SENFSCons.GlobalTargets
[senf.git] / Utils / Console / UDPServer.cc
index f67030a..73834be 100644 (file)
@@ -35,7 +35,8 @@
 ///////////////////////////////cc.p////////////////////////////////////////
 
 prefix_ senf::console::UDPServer::UDPServer(senf::INet4SocketAddress const & address)
-    : replies_ (true), target_ (), handle_ (senf::UDPv4ClientSocketHandle(address)), 
+    : replies_ (true), emptyReplies_ (true), target_ (), 
+      handle_ (senf::UDPv4ClientSocketHandle(address)), 
       readevent_ ("senf::console::UDPServer::readevent", 
                   senf::membind(&UDPServer::handleInput, this), 
                   handle_, 
@@ -44,7 +45,7 @@ prefix_ senf::console::UDPServer::UDPServer(senf::INet4SocketAddress const & add
 {
     if (address.address().multicast())
         handle_.facet<senf::INet4MulticastSocketProtocol>().mcAddMembership(address.address());
-    SENF_LOG(("UDP Console server started at " << address));
+    SENF_LOG(("UDP Console server started at " << address ));
 }
 
 prefix_ senf::console::UDPServer::UDPServer(senf::INet6SocketAddress const & address)
@@ -57,7 +58,7 @@ prefix_ senf::console::UDPServer::UDPServer(senf::INet6SocketAddress const & add
 {
     if (address.address().multicast())
         handle_.facet<senf::INet6MulticastSocketProtocol>().mcAddMembership(address.address());
-    SENF_LOG(("UDP Console server started at " << address));
+    SENF_LOG(("UDP Console server started at " << address ));
 }
 
 prefix_ senf::console::UDPServer & senf::console::UDPServer::replies(bool enable)
@@ -82,6 +83,12 @@ senf::console::UDPServer::replies(senf::INet6SocketAddress const & address)
     return *this;
 }
 
+prefix_ senf::console::UDPServer & senf::console::UDPServer::emptyReplies(bool enable)
+{
+    emptyReplies_ = enable;
+    return *this;
+}
+
 prefix_ senf::console::DirectoryNode & senf::console::UDPServer::root()
     const
 {
@@ -107,7 +114,7 @@ prefix_ void senf::console::UDPServer::handleInput(int events)
     senf::GenericBSDSocketAddress address;
     handle_.readfrom(data, address, 0u);
     boost::trim(data);
-    
+
     executor_.cwd(executor_.chroot());
     std::stringstream stream;
     try {
@@ -116,14 +123,16 @@ prefix_ void senf::console::UDPServer::handleInput(int events)
     catch (Executor::ExitException &) {
         // Ignored
     }
+    catch (ExceptionMixin & ex) {
+        stream << ex.message() << '\n';
+        SENF_LOG((senf::log::IMPORTANT)("Error: " << ex.message()));
+        SENF_LOG((senf::log::NOTICE)(ex.backtrace()));
+    }
     catch (std::exception & ex) {
-        std::string msg (ex.what());
-        std::string::size_type i (msg.find("-- \n"));
-        if (i != std::string::npos)
-            msg = msg.substr(i+4);
-        stream << msg << std::endl;
+        stream << ex.what() << '\n';
+        SENF_LOG((senf::log::IMPORTANT)("Error: " << ex.what()));
     }
-    if (replies_) {
+    if (replies_ && (emptyReplies_ || ! stream.str().empty())) {
         if (target_)
             address = target_;
         if (stream.str().empty())