Skip to content
Snippets Groups Projects
Commit 29b91f0c authored by g0dil's avatar g0dil
Browse files

Socket: Move protocol into the socket body (as private base class) and allow...

Socket: Move protocol into the socket body (as private base class) and allow non-const protocol access
parent 9b3a4183
No related branches found
No related tags found
No related merge requests found
Showing
with 47 additions and 179 deletions
......@@ -124,12 +124,9 @@ prefix_ senf::ClientSocketHandle<Policy>::ClientSocketHandle(FileHandle other, b
template <class Policy>
prefix_
senf::ClientSocketHandle<Policy>::ClientSocketHandle(std::auto_ptr<SocketProtocol> protocol,
int fd)
: SocketHandle<Policy>(protocol,false)
{
this->body().fd(fd);
}
senf::ClientSocketHandle<Policy>::ClientSocketHandle(std::auto_ptr<SocketBody> body)
: SocketHandle<Policy>(body)
{}
#ifndef DOXYGEN
template <class Policy>
......
......@@ -429,8 +429,7 @@ namespace senf {
protected:
ClientSocketHandle(FileHandle other, bool isChecked);
explicit ClientSocketHandle(std::auto_ptr<SocketProtocol> protocol,
int fd = -1);
explicit ClientSocketHandle(std::auto_ptr<SocketBody> body);
private:
unsigned available();
......
......@@ -39,17 +39,17 @@
namespace {
namespace sl = senf;
class MySocketHandle
: public sl::ClientSocketHandle<sl::test::SomeProtocol::Policy>
: public senf::ClientSocketHandle<senf::test::SomeProtocol::Policy>
{
public:
MySocketHandle()
: sl::ClientSocketHandle<sl::test::SomeProtocol::Policy>(
std::auto_ptr<sl::SocketProtocol>(new sl::test::SomeProtocol()))
: senf::ClientSocketHandle<senf::test::SomeProtocol::Policy>(
std::auto_ptr<senf::SocketBody>(
new senf::ProtocolSocketBody<senf::test::SomeProtocol>(false)))
{}
};
}
BOOST_AUTO_UNIT_TEST(clientSocketHandle)
......@@ -59,27 +59,27 @@ BOOST_AUTO_UNIT_TEST(clientSocketHandle)
// conversion to other socket handles
{
typedef sl::MakeSocketPolicy<
sl::test::SomeFramingPolicy,
sl::test::SomeReadPolicy,
sl::test::SomeWritePolicy
typedef senf::MakeSocketPolicy<
senf::test::SomeFramingPolicy,
senf::test::SomeReadPolicy,
senf::test::SomeWritePolicy
>::policy OtherSocketPolicy;
typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
typedef senf::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
BOOST_CHECKPOINT("Copy-constructing socket handle");
OtherSocketHandle osh (myh);
BOOST_CHECKPOINT("Assigning socket handle");
osh = myh;
typedef sl::ClientSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
typedef senf::ClientSocketHandle<senf::test::SomeProtocol::Policy> SomeSocketHandle;
BOOST_CHECKPOINT("static_casting socket handle");
SomeSocketHandle ssh =
sl::static_socket_cast<SomeSocketHandle>(osh);
BOOST_CHECK_NO_THROW( sl::dynamic_socket_cast<SomeSocketHandle>(osh) );
typedef sl::ClientSocketHandle<sl::MakeSocketPolicy<
senf::static_socket_cast<SomeSocketHandle>(osh);
BOOST_CHECK_NO_THROW( senf::dynamic_socket_cast<SomeSocketHandle>(osh) );
typedef senf::ClientSocketHandle<senf::MakeSocketPolicy<
OtherSocketPolicy,
sl::NoAddressingPolicy
senf::NoAddressingPolicy
>::policy> SomeOtherSocketHandle;
BOOST_CHECK_THROW( sl::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
BOOST_CHECK_THROW( senf::dynamic_socket_cast<SomeOtherSocketHandle>(osh),
std::bad_cast );
}
......
......@@ -43,7 +43,7 @@ ProtocolClientSocketHandle(senf::NoInit_t)
template <class SocketProtocol>
prefix_ senf::ProtocolClientSocketHandle<SocketProtocol>::ProtocolClientSocketHandle()
: ClientSocketHandle<typename SocketProtocol::Policy>(
std::auto_ptr<senf::SocketProtocol>(new SocketProtocol()))
std::auto_ptr<senf::SocketBody>(new senf::ProtocolSocketBody<SocketProtocol>(false)))
{
this->protocol().init_client();
}
......
......@@ -62,7 +62,7 @@ template < mpp_TemplateParameters() >
prefix_ senf::ProtocolClientSocketHandle<SocketProtocol>::
ProtocolClientSocketHandle( mpp_MethodParameters() )
: ClientSocketHandle<typename SocketProtocol::Policy>(
std::auto_ptr<senf::SocketProtocol>(new SocketProtocol()))
std::auto_ptr<senf::SocketBody>(new ProtocolSocketBody<SocketProtocol>(false)))
{
this->protocol().init_client( mpp_CallParameters() );
}
......@@ -88,4 +88,6 @@ ProtocolClientSocketHandle( mpp_MethodParameters() )
// c-file-style: "senf"
// indent-tabs-mode: nil
// ispell-local-dictionary: "american"
// compile-command: "scons -u test"
// comment-column: 40
// End:
......@@ -43,7 +43,7 @@ ProtocolServerSocketHandle(senf::NoInit_t)
template <class SocketProtocol>
prefix_ senf::ProtocolServerSocketHandle<SocketProtocol>::ProtocolServerSocketHandle()
: ServerSocketHandle<typename SocketProtocol::Policy>(
std::auto_ptr<senf::SocketProtocol>(new SocketProtocol()))
std::auto_ptr<senf::SocketBody>(new ProtocolSocketBody<SocketProtocol>(true)))
{}
#define BOOST_PP_ITERATION_PARAMS_1 (4, (1, 9, SENF_ABSOLUTE_INCLUDE_PATH(Socket/ProtocolServerSocketHandle.mpp), 2))
......
......@@ -66,7 +66,7 @@ template < mpp_PSSH_TemplateParameters() >
prefix_ senf::ProtocolServerSocketHandle<SocketProtocol>::
ProtocolServerSocketHandle( mpp_PSSH_MethodParameters() )
: ServerSocketHandle<typename SocketProtocol::Policy>(
std::auto_ptr<senf::SocketProtocol>(new SocketProtocol()))
std::auto_ptr<senf::SocketBody>(new ProtocolSocketBody<SocketProtocol>(true)))
{
this->protocol().init_server( mpp_PSSH_CallParameters() );
}
......
......@@ -69,8 +69,8 @@ BOOST_AUTO_UNIT_TEST(protocolServerSocketHandle)
"file.handle: -1\n"
"file.refcount: 2\n"
"handle: senf::ProtocolServerSocketHandle<(anonymous namespace)::MyProtocol>\n"
"socket.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
"socket.protocol: (anonymous namespace)::MyProtocol\n"
"socket.protocol.policy: senf::SocketPolicy<senf::test::SomeAddressingPolicy, senf::test::SomeFramingPolicy, senf::test::SomeCommunicationPolicy, senf::test::SomeReadPolicy, senf::test::SomeWritePolicy>\n"
"socket.server: true\n" );
}
......
......@@ -57,12 +57,6 @@ prefix_ unsigned senf::DVBDemuxSectionProtocol::available()
return 4096;
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::DVBDemuxSectionProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new DVBDemuxSectionProtocol());
}
prefix_ void senf::DVBDemuxSectionProtocol::setSectionFilter(struct dmx_sct_filter_params *filter)
const
{
......@@ -89,12 +83,6 @@ prefix_ unsigned senf::DVBDemuxPESProtocol::available()
return 4096; //???
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::DVBDemuxPESProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new DVBDemuxPESProtocol());
}
prefix_ void senf::DVBDemuxPESProtocol::setPESFilter(struct dmx_pes_filter_params *filter)
const
{
......@@ -121,12 +109,6 @@ prefix_ unsigned senf::DVBDvrProtocol::available()
return 188;
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::DVBDvrProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new DVBDvrProtocol());
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "DVBDemuxHandles.mpp"
......
......@@ -52,7 +52,7 @@ namespace senf {
/** \brief xxx
*/
class DVBDemuxSectionProtocol
: public ConcreteSocketProtocol<DVBDemux_Policy>,
: public ConcreteSocketProtocol<DVBDemux_Policy, DVBDemuxSectionProtocol>,
public DVBDemuxProtocol
{
public:
......@@ -73,8 +73,6 @@ namespace senf {
unsigned available() const;
std::auto_ptr<SocketProtocol> clone() const;
///@}
void setSectionFilter(struct dmx_sct_filter_params *filter) const;
......@@ -87,7 +85,7 @@ namespace senf {
/** \brief xxx
*/
class DVBDemuxPESProtocol
: public ConcreteSocketProtocol<DVBDemux_Policy>,
: public ConcreteSocketProtocol<DVBDemux_Policy,DVBDemuxPESProtocol>,
public DVBDemuxProtocol
{
public:
......@@ -108,8 +106,6 @@ namespace senf {
unsigned available() const;
std::auto_ptr<SocketProtocol> clone() const;
///@}
void setPESFilter(struct dmx_pes_filter_params *filter) const;
......@@ -124,7 +120,7 @@ namespace senf {
/** \brief xxx
*/
class DVBDvrProtocol
: public ConcreteSocketProtocol<DVBDemux_Policy>,
: public ConcreteSocketProtocol<DVBDemux_Policy, DVBDvrProtocol>,
public DVBDemuxProtocol
{
public:
......@@ -145,8 +141,6 @@ namespace senf {
unsigned available() const;
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......
......@@ -63,13 +63,6 @@ prefix_ bool senf::DVBFrontendProtocol::eof()
return false;
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::DVBFrontendProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new DVBFrontendProtocol());
}
prefix_ void senf::DVBFrontendProtocol::signalStrength(int16_t *strength)
const
{
......
......@@ -54,7 +54,7 @@ namespace senf {
/** \brief xxx
*/
class DVBFrontendProtocol
: public ConcreteSocketProtocol<DVBFrontend_Policy>
: public ConcreteSocketProtocol<DVBFrontend_Policy, DVBFrontendProtocol>
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -75,8 +75,6 @@ namespace senf {
unsigned available() const;
bool eof() const;
std::auto_ptr<SocketProtocol> clone() const;
///@}
void signalStrength(int16_t *strength) const;
......
......@@ -60,12 +60,6 @@ senf::ConnectedRawV4SocketProtocol::init_client(int const & protocol, INet4Socke
clientHandle().connect(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedRawV4SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new ConnectedRawV4SocketProtocol());
}
///////////////////////////////////////////////////////////////////////////
// senf::UDPv6SocketProtocol::
......@@ -92,12 +86,6 @@ senf::ConnectedRawV6SocketProtocol::init_client(int const & protocol, INet6Socke
clientHandle().connect(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedRawV6SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new ConnectedRawV6SocketProtocol());
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "ConnectedRawINetSocketHandle.mpp"
......
......@@ -74,12 +74,11 @@ namespace senf {
\see RawV6SocketProtocol
*/
class ConnectedRawV4SocketProtocol
: public ConcreteSocketProtocol<ConnectedRawV4Socket_Policy>,
: public ConcreteSocketProtocol<ConnectedRawV4Socket_Policy, ConnectedRawV4SocketProtocol>,
public IPv4Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol//,
// public senf::pool_alloc_mixin<RawV4Socket_Policy>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -101,11 +100,6 @@ namespace senf {
\param[in] protocol Layer 4 protocol to filter for / to send
\param[in] address local address to connect to */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......@@ -149,12 +143,11 @@ namespace senf {
\see RawV6SocketProtocol
*/
class ConnectedRawV6SocketProtocol
: public ConcreteSocketProtocol<ConnectedRawV6Socket_Policy>,
: public ConcreteSocketProtocol<ConnectedRawV6Socket_Policy, ConnectedRawV6SocketProtocol>,
public IPv6Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol//,
// public senf::pool_alloc_mixin<RawV6SocketProtocol>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -180,11 +173,6 @@ namespace senf {
ProtocolClientSocketHandle::ProtocolClientSocketHandle()
constructor (??) */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......
......@@ -58,12 +58,6 @@ senf::ConnectedUDPv4SocketProtocol::init_client(INet4SocketAddress const & addre
clientHandle().connect(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedUDPv4SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new ConnectedUDPv4SocketProtocol());
}
///////////////////////////////////////////////////////////////////////////
// senf::ConnectedUDPv6SocketProtocol::
......@@ -84,12 +78,6 @@ senf::ConnectedUDPv6SocketProtocol::init_client(INet6SocketAddress const & addre
clientHandle().connect(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::ConnectedUDPv6SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new ConnectedUDPv6SocketProtocol());
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "ConnectedUDPSocketHandle.mpp"
......
......@@ -77,12 +77,11 @@ namespace senf {
\see ConnectedUDPv6SocketProtocol
*/
class ConnectedUDPv4SocketProtocol
: public ConcreteSocketProtocol<ConnectedUDPv4Socket_Policy>,
: public ConcreteSocketProtocol<ConnectedUDPv4Socket_Policy, ConnectedUDPv4SocketProtocol>,
public IPv4Protocol,
public UDPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public senf::pool_alloc_mixin<ConnectedUDPv4SocketProtocol>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -105,11 +104,6 @@ namespace senf {
ProtocolClientSocketHandle::ProtocolClientSocketHandle()
constructor */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......@@ -143,12 +137,11 @@ namespace senf {
\see ConnectedUDPv4SocketProtocol
*/
class ConnectedUDPv6SocketProtocol
: public ConcreteSocketProtocol<ConnectedUDPv6Socket_Policy>,
: public ConcreteSocketProtocol<ConnectedUDPv6Socket_Policy, ConnectedUDPv6SocketProtocol>,
public IPv6Protocol,
public UDPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public senf::pool_alloc_mixin<ConnectedUDPv6SocketProtocol>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -171,11 +164,6 @@ namespace senf {
ProtocolClientSocketHandle::ProtocolClientSocketHandle()
constructor */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......
......@@ -60,12 +60,6 @@ senf::RawV4SocketProtocol::init_client(int const & protocol, INet4SocketAddress
clientHandle().bind(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::RawV4SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new RawV4SocketProtocol());
}
///////////////////////////////////////////////////////////////////////////
// senf::RawV6SocketProtocol::
......@@ -92,12 +86,6 @@ senf::RawV6SocketProtocol::init_client(int const & protocol, INet6SocketAddress
clientHandle().bind(address);
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::RawV6SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new RawV6SocketProtocol());
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "RawINetSocketHandle.mpp"
......
......@@ -74,14 +74,13 @@ namespace senf {
\see RawV6SocketProtocol
*/
class RawV4SocketProtocol
: public ConcreteSocketProtocol<RawV4Socket_Policy>,
: public ConcreteSocketProtocol<RawV4Socket_Policy, RawV4SocketProtocol>,
public IPv4Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public MulticastProtocol,
public INet4MulticastProtocol,
public senf::pool_alloc_mixin<RawV4SocketProtocol>
public INet4MulticastProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -103,11 +102,6 @@ namespace senf {
\param[in] protocol Layer 4 protocol to filter for / to send
\param[in] address local address to bind to */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......@@ -149,14 +143,13 @@ namespace senf {
\see RawV4SocketProtocol
*/
class RawV6SocketProtocol
: public ConcreteSocketProtocol<RawV6Socket_Policy>,
: public ConcreteSocketProtocol<RawV6Socket_Policy,RawV6SocketProtocol>,
public IPv6Protocol,
public RawINetProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public MulticastProtocol,
public INet4MulticastProtocol,
public senf::pool_alloc_mixin<RawV6SocketProtocol>
public INet4MulticastProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -182,11 +175,6 @@ namespace senf {
ProtocolClientSocketHandle::ProtocolClientSocketHandle()
constructor */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......
......@@ -78,12 +78,6 @@ prefix_ void senf::TCPv4SocketProtocol::init_server(INet4SocketAddress const & a
throwErrno();
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::TCPv4SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new TCPv4SocketProtocol());
}
///////////////////////////////////////////////////////////////////////////
// senf::TCPv6SocketProtocol::
......@@ -124,12 +118,6 @@ prefix_ void senf::TCPv6SocketProtocol::init_server(INet6SocketAddress const & a
throwErrno();
}
prefix_ std::auto_ptr<senf::SocketProtocol> senf::TCPv6SocketProtocol::clone()
const
{
return std::auto_ptr<SocketProtocol>(new TCPv6SocketProtocol());
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
//#include "TCPSocketHandle.mpp"
......
......@@ -31,7 +31,6 @@
#define HH_TCPSocketHandle_ 1
// Custom includes
#include "../../../Utils/pool_alloc_mixin.hh"
#include "INetProtocol.hh"
#include "TCPProtocol.hh"
#include "../../../Socket/Protocols/BSDSocketProtocol.hh"
......@@ -80,12 +79,11 @@ namespace senf {
\see TCPv6SocketProtocol
*/
class TCPv4SocketProtocol
: public ConcreteSocketProtocol<TCPv4Socket_Policy>,
: public ConcreteSocketProtocol<TCPv4Socket_Policy,TCPv4SocketProtocol>,
public IPv4Protocol,
public TCPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public senf::pool_alloc_mixin<TCPv4SocketProtocol>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -123,11 +121,6 @@ namespace senf {
ProtocolServerSocketHandle::ProtocolServerSocketHandle()
constructor */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......@@ -162,12 +155,11 @@ namespace senf {
\see TCPv4SocketProtocol
*/
class TCPv6SocketProtocol
: public ConcreteSocketProtocol<TCPv6Socket_Policy>,
: public ConcreteSocketProtocol<TCPv6Socket_Policy,TCPv6SocketProtocol>,
public IPv6Protocol,
public TCPProtocol,
public BSDSocketProtocol,
public AddressableBSDSocketProtocol,
public senf::pool_alloc_mixin<TCPv6SocketProtocol>
public AddressableBSDSocketProtocol
{
public:
///////////////////////////////////////////////////////////////////////////
......@@ -205,11 +197,6 @@ namespace senf {
ProtocolServerSocketHandle::ProtocolServerSocketHandle()
constructor */
///@}
///\name Abstract Interface Implementation
std::auto_ptr<SocketProtocol> clone() const;
///@}
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment