// $Id$ // // Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // 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. // // 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. // // 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. /** \file \brief ClientSocketHandle inline template implementation */ //#include "ClientSocketHandle.ih" // Custom includes #include #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// template template prefix_ senf::ClientSocketHandle:: ClientSocketHandle(ClientSocketHandle other, typename SocketHandle::template IsCompatible::type *) : SocketHandle(other,true) {} template prefix_ senf::ClientSocketHandle::ClientSocketHandle(FileHandle other, bool isChecked) : SocketHandle(other, isChecked) {} template prefix_ senf::ClientSocketHandle:: ClientSocketHandle(std::auto_ptr protocol, int fd) : SocketHandle(protocol,false) { this->body().fd(fd); } template template prefix_ typename senf::SocketHandle::template IsCompatible::type const & senf::ClientSocketHandle::operator=(ClientSocketHandle other) { assign(other); return *this; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // reading and writing template prefix_ unsigned senf::ClientSocketHandle::read(char * buffer, unsigned size) { return Policy::ReadPolicy::read(*this, buffer, size); } template prefix_ unsigned senf::ClientSocketHandle:: readfrom(char * buffer, unsigned size, typename Policy::AddressingPolicy::Address & from) { return Policy::ReadPolicy::readfrom(*this, buffer, size, from); } template prefix_ unsigned senf::ClientSocketHandle::write(char const * buffer, unsigned size) { return Policy::WritePolicy::write(*this, buffer, size); } template prefix_ unsigned senf::ClientSocketHandle:: writeto(typename boost::call_traits::param_type addr, std::string const & data) { return this->writeto(addr, data.data(), data.size()); } template prefix_ unsigned senf::ClientSocketHandle:: writeto(typename boost::call_traits::param_type addr, char const * buffer, unsigned size) { return Policy::WritePolicy::writeto(*this, addr, buffer, size); } /////////////////////////////////////////////////////////////////////////// // addressing template prefix_ typename Policy::AddressingPolicy::Address senf::ClientSocketHandle::peer() { typename Policy::AddressingPolicy::Address addr; this->peer(addr); return addr; } template prefix_ void senf::ClientSocketHandle:: peer(typename Policy::AddressingPolicy::Address & addr) { Policy::AddressingPolicy::peer(*this,addr); } template prefix_ typename Policy::AddressingPolicy::Address senf::ClientSocketHandle::local() { typename Policy::AddressingPolicy::Address addr; this->local(addr); return addr; } template prefix_ void senf::ClientSocketHandle:: local(typename Policy::AddressingPolicy::Address & addr) { Policy::AddressingPolicy::local(*this,addr); } template prefix_ void senf::ClientSocketHandle::connect(AddressParam addr) { Policy::AddressingPolicy::connect(*this,addr); } template prefix_ void senf::ClientSocketHandle:: bind(typename boost::call_traits::param_type addr) { Policy::AddressingPolicy::bind(*this,addr); } /////////////////////////////////////////////////////////////////////////// // Buffering template prefix_ unsigned senf::ClientSocketHandle::rcvbuf() { return Policy::BufferingPolicy::rcvbuf(*this); } template prefix_ void senf::ClientSocketHandle::rcvbuf(unsigned size) { Policy::BufferingPolicy::rcvbuf(*this,size); } template prefix_ unsigned senf::ClientSocketHandle::sndbuf() { return Policy::BufferingPolicy::sndbuf(*this); } template prefix_ void senf::ClientSocketHandle::sndbuf(unsigned size) { Policy::BufferingPolicy::sndbuf(*this,size); } /////////////////////////////////////////////////////////////////////////// template prefix_ senf::ClientSocketHandle senf::ClientSocketHandle::cast_static(FileHandle handle) { return ClientSocketHandle(handle, true); } template prefix_ senf::ClientSocketHandle senf::ClientSocketHandle::cast_dynamic(FileHandle handle) { SocketHandle h (SocketHandle::cast_dynamic(handle)); if (static_cast(FileHandle::body(h)).isServer()) throw std::bad_cast(); return cast_static(handle); } template prefix_ void senf::ClientSocketHandle::state(SocketStateMap & map, unsigned lod) { map["handle"] = prettyName(typeid(*this)); this->body().state(map,lod); } template prefix_ std::string senf::ClientSocketHandle::dumpState(unsigned lod) { SocketStateMap map; state(map,lod); return detail::dumpState(map); } ///////////////////////////////cti.e/////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // End: