#include <senf/Utils/senfassert.hh>
#include <senf/Utils/membind.hh>
#include <senf/Utils/Logger/SenfLog.hh>
+#include <senf/Version.hh>
#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
prompt += " ";
stream() << std::flush;
- handle().write(prompt);
+ v_write(prompt);
promptLen_ = prompt.size();
promptActive_ = true;
}
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()
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()