diff --git a/Console/Server.cc b/Console/Server.cc index ac9f034c693a644d01ded11c9141dbc4163cb7aa..64b669e34f675077e6ffd85fd543d6b425f8a743 100644 --- a/Console/Server.cc +++ b/Console/Server.cc @@ -249,22 +249,26 @@ prefix_ void senf::console::Client::v_write(boost::posix_time::ptime timestamp, prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client const & client) { - // typedef senf::ClientSocketHandle<MakeSocketPolicy<INet4AddressingPolicy>::policy > v4Socket; - if( senf::check_socket_cast<TCPv4ServerSocketHandle::ClientSocketHandle>( client.handle())) { - os<<senf::dynamic_socket_cast<TCPv4ServerSocketHandle::ClientSocketHandle>( client.handle()).peer(); - } - else if( senf::check_socket_cast<TCPv6ServerSocketHandle::ClientSocketHandle>( client.handle())) { - os<<senf::dynamic_socket_cast<TCPv6ServerSocketHandle::ClientSocketHandle>( client.handle()).peer(); - } - else{ - os<<((void *)&client); - } + typedef ClientSocketHandle< MakeSocketPolicy< + INet4AddressingPolicy,ConnectedCommunicationPolicy>::policy > V4Socket; + typedef ClientSocketHandle< MakeSocketPolicy< + INet6AddressingPolicy,ConnectedCommunicationPolicy>::policy > V6Socket; + + if (check_socket_cast<V4Socket>(client.handle())) + os << dynamic_socket_cast<V4Socket>(client.handle()).peer(); + else if (check_socket_cast<V6Socket>(client.handle())) + os << dynamic_socket_cast<V6Socket>(client.handle()).peer(); + else + os << static_cast<void const *>(&client); + return os; } + prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client * client) { - return os<<*client; + return os << *client; } + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "Server.mpp" diff --git a/Console/Server.ih b/Console/Server.ih index eabef7e1150384dd5ff9d2f2ea626344d3bbe120..6bbaf5a4d5c0e475bb8372a8fe01dc3193094ad5 100644 --- a/Console/Server.ih +++ b/Console/Server.ih @@ -80,14 +80,20 @@ namespace detail { virtual ~ClientReader() = 0; + // Called by subclasses to get information from the Client + Client & client() const; std::string promptString() const; ClientHandle handle() const; std::ostream & stream() const; + + // Called by subclasses to perform actions in the Client + void stopClient(); - void handleInput(std::string const & input) const; + // Called by the Client + void disablePrompt(); void enablePrompt(); void translate(std::string & data); diff --git a/Socket/SocketHandle.cti b/Socket/SocketHandle.cti index cbd90890245f3583f10b1a3d9c0f817cc914eefb..b04f1f8133f9bf7e2ca6555cc5f342f6b5bba9e1 100644 --- a/Socket/SocketHandle.cti +++ b/Socket/SocketHandle.cti @@ -133,11 +133,11 @@ prefix_ Target senf::static_socket_cast(Source handle) template <class Target, class Source> prefix_ Target senf::dynamic_socket_cast(Source handle) { - BOOST_STATIC_ASSERT(( - boost::is_convertible<Source*,FileHandle*>::value && - boost::is_convertible<Target*,FileHandle*>::value && - ( boost::is_convertible<Source,Target>::value || - boost::is_convertible<Target,Source>::value ) )); +// BOOST_STATIC_ASSERT(( +// boost::is_convertible<Source*,FileHandle*>::value && +// boost::is_convertible<Target*,FileHandle*>::value && +// ( boost::is_convertible<Source,Target>::value || +// boost::is_convertible<Target,Source>::value ) )); try { return Target::cast_dynamic(handle); } @@ -147,11 +147,11 @@ prefix_ Target senf::dynamic_socket_cast(Source handle) template <class Target, class Source> prefix_ bool senf::check_socket_cast(Source handle) { - BOOST_STATIC_ASSERT(( - boost::is_convertible<Source*,FileHandle*>::value && - boost::is_convertible<Target*,FileHandle*>::value && - ( boost::is_convertible<Source,Target>::value || - boost::is_convertible<Target,Source>::value ) )); +// BOOST_STATIC_ASSERT(( +// boost::is_convertible<Source*,FileHandle*>::value && +// boost::is_convertible<Target*,FileHandle*>::value && +// ( boost::is_convertible<Source,Target>::value || +// boost::is_convertible<Target,Source>::value ) )); // we don't have a non-throwing variant of cast_dynamic // for two reasons: // a) since the handle is passed back by value, we cannot return diff --git a/Socket/SocketHandle.test.cc b/Socket/SocketHandle.test.cc index c88c6363da80e34f611c18df9d5fd37b8bc6fe04..c8071f3afd6020a44ba702e509279df32089115b 100644 --- a/Socket/SocketHandle.test.cc +++ b/Socket/SocketHandle.test.cc @@ -66,6 +66,12 @@ BOOST_AUTO_UNIT_TEST(socketHandle) >::policy OtherSocketPolicy; typedef senf::SocketHandle<OtherSocketPolicy> OtherSocketHandle; + typedef senf::MakeSocketPolicy< + senf::test::SomeCommunicationPolicy, + senf::test::SomeAddressingPolicy + >::policy AnotherSocketPolicy; + typedef senf::SocketHandle<AnotherSocketPolicy> AnotherSocketHandle; + { MySocketHandle myh; OtherSocketHandle osh (myh); @@ -75,6 +81,7 @@ BOOST_AUTO_UNIT_TEST(socketHandle) SomeSocketHandle ssh = senf::static_socket_cast<SomeSocketHandle>(osh); BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) ); + BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<AnotherSocketHandle>(osh) ); typedef senf::SocketHandle< senf::MakeSocketPolicy< OtherSocketPolicy, diff --git a/Socket/SocketPolicy.test.hh b/Socket/SocketPolicy.test.hh index d921a47cf31f4fb0fdb8106d69f2ec6d7b1fe38f..00bf25273cb84da046b6a4c276f49f1df2aeedeb 100644 --- a/Socket/SocketPolicy.test.hh +++ b/Socket/SocketPolicy.test.hh @@ -31,7 +31,6 @@ ///////////////////////////////hh.p//////////////////////////////////////// namespace senf { - namespace test { struct SomeAddressingPolicy : public senf::AddressingPolicyBase