//
// Copyright (C) 2006
// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.de>
//
-// 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 <g0dil@berlios.de>
/** \file
\brief ClientSocketHandle public header
#include "SocketHandle.hh"
//#include "ClientSocketHandle.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace senf {
/// \addtogroup handle_group
- /// @{
+ //\{
template <class SPolicy> class ServerSocketHandle;
This class provides the client side policy interface of the socket
abstraction. ClientSocketHandle defines the complete policy interface. It does not implement
any functionality itself however. The following table shows, to which policy members each
- group of ClientSocketHandle members is forwardd. The last collumn shows, on which other
+ group of ClientSocketHandle members is forwarded. The last column shows, on which other
policies this member-group depends <em>in the default policy classes</em>. If you define
your own policy classes, the dependencies are up to you.
\idea Give SocketHandle (and therefore ClientSocketHandle and ServerSocketHandle) a \c
protocol() template member and an additional template arg \c Policies. This arg should be a
- typelist of Poclicy classes which can be accessed. You use protocol<ProtocolClass>() to
+ typelist of policy classes which can be accessed. You use protocol<ProtocolClass>() to
access a protocol class. \c Policies can of course be underspecified or even empty.
\see \ref policy_group \n
: public SocketHandle<SPolicy>
{
public:
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
// Types
/// Address type from the addressing policy
/// 'Best' type for passing address as parameter
/** Depending on the type of \c Address, this will be either <tt>Address</tt> or <tt>Address
const &</tt>. See <a
- href="http://www.boost.org/libs/utility/call_traits.htm">call_traits documentation in
+ href="http://www.boost.org/doc/libs/release/libs/utility/call_traits.htm">call_traits documentation in
the Boost.Utility library.</a>
*/
typedef typename boost::call_traits<Address>::param_type AddressParam;
NoAddressingPolicy. */
typedef ServerSocketHandle<SPolicy> ServerHandle;
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
///\name Structors and default members
- ///@{
+ //\{
// default default constructor
// default copy constructor
# else
template <class OtherPolicy>
ClientSocketHandle<OtherPolicy> const & operator=(ClientSocketHandle<OtherPolicy> other);
-# endif
+# endif
- ///@}
- ///////////////////////////////////////////////////////////////////////////
+ //\}
+ //-////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
///\name Reading and Writing
- ///@{
+ //\{
/** \brief Read data from socket
the other end) and will block, if no data is available now. If you do not want to block,
you \e must make the socket non-blocking (using FileHandle::blocking()).
- \throws senf::SystemException
+ \throws senf::SystemException
This variant will read up to \c limit bytes from the
\c recv.
*/
std::string read (unsigned limit=0);
- template <class ForwardWritableRange>
+
# ifndef DOXYGEN
- typename boost::range_iterator<ForwardWritableRange>::type
- read (ForwardWritableRange const & range,
- typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type * = 0);
+ template <class ForwardWritableRange>
+ typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned>,
+ typename boost::range_iterator<ForwardWritableRange>::type>::type
+ read(ForwardWritableRange const & range);
# else
+ template <class ForwardWritableRange>
typename boost::range_iterator<ForwardWritableRange>::type
read (ForwardWritableRange const & range);
///< Read data into range
range. read returns a past-the-end iterator after the
last character read. This iterator will point to
somewhere within the input range.
- \param[in,out] range Range to store data in
+ \param[in,out] range Range to store data in
\returns past-the-end iterator pointer to after the
- last read character
+ last read character
\see \ref read() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
# endif
# ifndef DOXYGEN
template <class ForwardWritableRange>
- typename boost::range_iterator<ForwardWritableRange>::type
- read (ForwardWritableRange & range,
- typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned> >::type * = 0);
+ typename boost::disable_if< boost::is_convertible<ForwardWritableRange,unsigned>,
+ typename boost::range_iterator<ForwardWritableRange>::type>::type
+ read(ForwardWritableRange & range);
# else
template <class ForwardWritableRange>
typename boost::range_iterator<ForwardWritableRange>::type
///< Read data into range
/**< \see read(ForwardWritableRange const &) \n
read() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
# endif
template <class Sequence>
void read (Sequence & container, unsigned limit);
work, the container must be a model of 'Sequence' as
defined in the STL documentation
\param[out] container Container to write data to
- \param[in] limit Maximum number of characters to read
+ \param[in] limit Maximum number of characters to read
\see \ref read() */
char * read (char * start, char * end);
///< Read data into memory area
range. read returns a past-the-end iterator after the
last character read. This iterator will point to
somewhere within the input range.
- \param[in,out] range Range to store data in
+ \param[in,out] range Range to store data in
\param[out] from peers address from which the data was
received
\returns past-the-end iterator pointer to after the
- last read character
+ last read character
\see \ref readfrom() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
template <class ForwardWritableRange>
typename boost::range_iterator<ForwardWritableRange>::type
readfrom (ForwardWritableRange & range, Address & from);
///< Read data into range
/**< \see readfrom(ForwardWritableRange const&,Address&) \n
readfrom() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
template <class Sequence>
void readfrom (Sequence & container, Address & from, unsigned limit);
///< Read data into container
work, the container must be a model of 'Sequence' as
defined in the STL documentation
\param[out] container Container to write data to
- \param[in] limit Maximum number of characters to read
+ \param[in] limit Maximum number of characters to read
\param[out] from peers address from which the data was
received
\see \ref readfrom() */
\param[in] end past-the-end pointer to area to write
\returns past-the-end pointer after last byte written
\see \ref write() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
/** \brief Write data to unconnected socket
\param[in] end past-the-end pointer after data to write
\returns past-the-end iterator after last byte written
\see \ref writeto() \n
- <a href="http://www.boost.org/libs/range/index.html">Boost.Range</a> */
+ <a href="http://www.boost.org/doc/libs/release/libs/range/index.html">Boost.Range</a> */
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
///\name Addressing
- ///@{
+ //\{
/** \brief Connect to remote peer
///< Query local address
/**< \see \ref local() */
- ///@}
+ //\}
static ClientSocketHandle cast_static(FileHandle handle);
static ClientSocketHandle cast_dynamic(FileHandle handle);
friend class senf::ServerSocketHandle<SPolicy>;
};
- /// @}
+ //\}
}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
//#include "ClientSocketHandle.cci"
#include "ClientSocketHandle.ct"
#include "ClientSocketHandle.cti"