diff --git a/Socket/ClientSocketHandle.test.cc b/Socket/ClientSocketHandle.test.cc index 389f30ec85d33869cec4e925eec33dad22dcd290..69505645ebd98fc70f038ced813039b8b0a68800 100644 --- a/Socket/ClientSocketHandle.test.cc +++ b/Socket/ClientSocketHandle.test.cc @@ -64,8 +64,11 @@ BOOST_AUTO_UNIT_TEST(clientSocketHandle) >::policy OtherSocketPolicy; typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle; - OtherSocketHandle ssh (myh); - ssh = myh; + OtherSocketHandle osh (myh); + osh = myh; + typedef sl::ClientSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle; + SomeSocketHandle ssh = + sl::static_socket_cast<SomeSocketHandle>(osh); } // reading and writing diff --git a/Socket/ProtocolClientSocketHandle.test.cc b/Socket/ProtocolClientSocketHandle.test.cc index 7c73b90460aa173f1de8a8aca79d8398d477a3ae..be924cec378fb8929c99a8ec82781acec64c4a43 100644 --- a/Socket/ProtocolClientSocketHandle.test.cc +++ b/Socket/ProtocolClientSocketHandle.test.cc @@ -48,8 +48,18 @@ BOOST_AUTO_UNIT_TEST(protocolClientSocketHandle) typedef satcom::lib::ProtocolClientSocketHandle<MyProtocol> MySocketHandle; { + typedef satcom::lib::MakeSocketPolicy< + satcom::lib::test::SomeFramingPolicy, + satcom::lib::test::SomeReadPolicy, + satcom::lib::test::SomeWritePolicy + >::policy OtherSocketPolicy; + typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle; + MySocketHandle h; h.protocol(); + + OtherSocketHandle osh (h); + h = satcom::lib::static_socket_cast<MySocketHandle>(osh); } { diff --git a/Socket/ProtocolServerSocketHandle.test.cc b/Socket/ProtocolServerSocketHandle.test.cc index 98408955bb3c8de4be57ecf24460eae20642189d..eb56abc118640c13d1e793219b08b4312e1de82f 100644 --- a/Socket/ProtocolServerSocketHandle.test.cc +++ b/Socket/ProtocolServerSocketHandle.test.cc @@ -49,7 +49,18 @@ BOOST_AUTO_UNIT_TEST(protocolServerSocketHandle) typedef satcom::lib::ProtocolServerSocketHandle<MyProtocol> MySocketHandle; { + typedef satcom::lib::MakeSocketPolicy< + satcom::lib::test::SomeFramingPolicy, + satcom::lib::test::SomeReadPolicy, + satcom::lib::test::SomeWritePolicy + >::policy OtherSocketPolicy; + typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle; + MySocketHandle h; + h.protocol(); + + OtherSocketHandle osh (h); + h = satcom::lib::static_socket_cast<MySocketHandle>(osh); MySocketHandle::ClientSocketHandle client = h.accept(); BOOST_CHECK_EQUAL( client.fd(), -1 ); diff --git a/Socket/ServerSocketHandle.test.cc b/Socket/ServerSocketHandle.test.cc index 73909ac9c642667517926fc9b7d8cd9f819bba32..579f35c78e21e4cc4a34320e3ac02ad2857c49db 100644 --- a/Socket/ServerSocketHandle.test.cc +++ b/Socket/ServerSocketHandle.test.cc @@ -61,8 +61,11 @@ BOOST_AUTO_UNIT_TEST(serverSocketHandle) typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle; MySocketHandle myh; - OtherSocketHandle ssh (myh); - ssh = myh; + OtherSocketHandle osh (myh); + osh = myh; + + typedef sl::ServerSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle; + SomeSocketHandle ssh = sl::static_socket_cast<SomeSocketHandle>(osh); BOOST_CHECK_NO_THROW( myh.bind(0) ); BOOST_CHECK_EQUAL( myh.local(), 2u ); diff --git a/Socket/SocketPolicy.hh b/Socket/SocketPolicy.hh index 74de6f3c08f00daf2038892b7663dadaf54530d2..07c2739fbab7d41cc3d717102ac59559ebd21b9d 100644 --- a/Socket/SocketPolicy.hh +++ b/Socket/SocketPolicy.hh @@ -38,6 +38,22 @@ namespace lib { (ReadPolicy) \ (WritePolicy) \ (BufferingPolicy) + + // The implementation file will for each Policy declared above + // define the following (SomePolicy is one of the above): + // + // struct SomePolicyBase; + // typedef UndefinedSomePolicy; + // template SomePolicyIs< SocketPolicy, Axis > + // template IfSomePolicyIs< SocketPolicy, Axis > + // template IfSomePolicyIsNot< SocketPolicy, Axis > + // + // Additionally the following are defined: + // + // class SocketPolicyBase + // template SocketPolicy< ..policies.. > + // template MakeSocketPolicy< ..args.. > + // template SocketPolicyIsBaseOf< Base, Derived > }}