X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FServer.hh;h=b2cdca6aecd1ce9abcb424456a1c6cb78c66cadc;hb=0003d55730b447329342161d12cf2ed23b63459e;hp=c538a5b279d26ecfb316dcbaa12961517d00e2c4;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Utils/Console/Server.hh b/senf/Utils/Console/Server.hh index c538a5b..b2cdca6 100644 --- a/senf/Utils/Console/Server.hh +++ b/senf/Utils/Console/Server.hh @@ -1,24 +1,29 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief Server public header */ @@ -30,20 +35,16 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include "Parse.hh" -#include "Executor.hh" +#include +#include #include #include +#include +#include "Executor.hh" //#include "Server.mpp" #include "Server.ih" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace console { @@ -70,14 +71,14 @@ namespace console { SENF_LOG_CLASS_AREA(); SENF_LOG_DEFAULT_LEVEL( senf::log::NOTICE ); public: - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// // Types - + typedef detail::ServerHandle ServerHandle; enum Mode { Automatic, Interactive, Noninteractive }; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// static Server & start(senf::INet4SocketAddress const & address); ///< Start server on given IPv4 address/port @@ -98,9 +99,9 @@ namespace console { Mode mode() const; ///< Get mode /**< \see \ref mode(Mode) */ - + Server & mode(Mode mode); ///< Set mode - /**< There are two Server types: + /**< There are two Server types: \li An interactive server displays a command prompt and optionally supports command-line editing. \li A non-interactive server does not display any @@ -115,7 +116,7 @@ namespace console { opened. */ void stop(); ///< Stop the server - /**< All clients will be closed + /**< All clients will be closed \warning The Server instance itself will be deleted */ protected: @@ -127,19 +128,19 @@ namespace console { void newClient(int event); void removeClient(Client & client); - + ServerHandle handle_; scheduler::FdEvent event_; DirectoryNode::ptr root_; Mode mode_; - + typedef std::set< boost::intrusive_ptr > Clients; Clients clients_; std::string name_; - + friend class Client; }; - + /** \brief Server client instance Whenever a new client connects, a new instance of this class is created. This class shows a @@ -149,7 +150,7 @@ namespace console { \ingroup console_access */ class Client - : public senf::intrusive_refcount, + : public senf::intrusive_refcount, private boost::base_from_member< detail::NonblockingSocketOStream >, public senf::log::IOStreamTarget { @@ -174,7 +175,7 @@ namespace console { ClientHandle handle() const; ///< Get the client's network socket handle std::ostream & stream(); ///< Get client's output stream /**< Data sent to this stream is sent out over the network - via the client's socket handle. Write operation is + via the client's socket handle. Write operation is non-blocking and data may be dropped. Data is written using Client::write(). */ std::string promptString() const; ///< Get the prompt string @@ -204,18 +205,18 @@ namespace console { will return the associated Client instance reference. \throws std::bad_cast if \a os is not associated with a Client instance. */ - static unsigned getWidth(std::ostream & os, unsigned defaultWidth = 0, + static unsigned getWidth(std::ostream & os, unsigned defaultWidth = 0, unsigned minWidth = 0); ///< Get width of client console if possible /**< If possible, the width of the client console attached to the stream \a os is returned. If this is not possible, the \a defaultValue will be used. - + If the width obtained this way is smaller than \a minWidth, \a defaultValue will be returned instead. */ protected: - + private: Client(Server & server, ClientHandle handle); @@ -223,10 +224,10 @@ namespace console { void setNoninteractive(); size_t handleInput(std::string input, bool incremental = false); - virtual void v_write(senf::log::time_type timestamp, std::string const & stream, - std::string const & area, unsigned level, + virtual void v_write(senf::log::time_type timestamp, std::string const & stream, + std::string const & area, unsigned level, std::string const & message); - + Server & server_; ClientHandle handle_; scheduler::FdEvent readevent_; @@ -242,15 +243,15 @@ namespace console { friend class detail::ClientReader; friend class detail::NonblockingSocketSink; - class SysBacktrace + class SysBacktrace { SysBacktrace(); static void backtrace(std::ostream & os); static SysBacktrace instance_; }; - + }; - + /** \brief Output Console Client instance as it's string representation \related Client */ @@ -263,7 +264,7 @@ namespace console { }} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #include "Server.cci" //#include "Server.ct" //#include "Server.cti"