X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FServer.cc;h=40b4d8059578cb51bfe133d1f2a92e72e5289732;hb=ecb47e13433d59c79a74a4641a2e68648f142723;hp=48ac147f697348fbd2a55e1b2f61e8a92d85ebe5;hpb=9cb871b939efe93e35dd96808d25089399acfc46;p=senf.git diff --git a/senf/Utils/Console/Server.cc b/senf/Utils/Console/Server.cc index 48ac147..40b4d80 100644 --- a/senf/Utils/Console/Server.cc +++ b/senf/Utils/Console/Server.cc @@ -36,14 +36,23 @@ #include #include #include +#include #include "LineEditor.hh" #include "ScopedDirectory.hh" #include "Sysdir.hh" +#include "SysInfo.hh" #include "ParsedCommand.hh" //#include "Server.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// +namespace { + senf::console::SysInfo::Proxy addSysInfo ( + "SENF: The Simple and Extensible Network Framework\n" + " © 2006-2010 Fraunhofer Institute for Open Communication Systems, Network Research\n" + " Contact: senf-dev@lists.berlios.de\n" + " Version: " SENF_LIB_VERSION " Revision number: " SENF_REVISION "\n", 0); +} /////////////////////////////////////////////////////////////////////////// // senf::console::detail::NonBlockingSocketSink @@ -164,7 +173,7 @@ prefix_ void senf::console::detail::DumbClientReader::showPrompt() prompt += " "; stream() << std::flush; - handle().write(prompt); + v_write(prompt); promptLen_ = prompt.size(); promptActive_ = true; } @@ -185,7 +194,17 @@ prefix_ void senf::console::detail::DumbClientReader::v_enablePrompt() prefix_ void senf::console::detail::DumbClientReader::v_write(std::string const & data) { - handle().write(data); + try { + handle().write(data); + } + catch (std::exception & ex) { + SENF_LOG(("unexpected failure writing to socket:" << ex.what())); + stopClient(); // SUICIDE + } + catch (...) { + SENF_LOG(("unexpected failure writing to socket: unknown exception")); + stopClient(); // SUICIDE + } } prefix_ unsigned senf::console::detail::DumbClientReader::v_width() @@ -213,7 +232,17 @@ prefix_ void senf::console::detail::NoninteractiveClientReader::v_enablePrompt() prefix_ void senf::console::detail::NoninteractiveClientReader::v_write(std::string const & data) { - handle().write(data); + try { + handle().write(data); + } + catch (std::exception & ex) { + SENF_LOG(("unexpected failure writing to socket:" << ex.what())); + stopClient(); // SUICIDE + } + catch (...) { + SENF_LOG(("unexpected failure writing to socket: unknown exception")); + stopClient(); // SUICIDE + } } prefix_ unsigned senf::console::detail::NoninteractiveClientReader::v_width()