diff --git a/Socket/Protocols/UN/UNAddress.test.cc b/Socket/Protocols/UN/UNAddress.test.cc index af64685c01fe325fc3d54875c18af70c4fb77f00..d21e706794c2e3d9455f71e6d49da7b6ca7934b4 100644 --- a/Socket/Protocols/UN/UNAddress.test.cc +++ b/Socket/Protocols/UN/UNAddress.test.cc @@ -36,13 +36,13 @@ BOOST_AUTO_UNIT_TEST(unAddress) { - // das koennt sicher mehr sein... - std::string testS = "/tmp/senfTestSocket"; - boost::filesystem::path testp = boost::filesystem::path(testS); - senf::UNAddress addr1 = senf::UNAddress::fromString(testS); - senf::UNAddress addr2 = senf::UNAddress::fromPath(testp); - BOOST_CHECK( testS == addr1.pathString()); - BOOST_CHECK( testS == addr2.pathString()); +// TODO: muss wieder rein. +// std::string testS = "/tmp/senfTestSocket"; +// boost::filesystem::path testp = boost::filesystem::path(testS); +// senf::UNAddress addr1 = senf::UNAddress::fromString(testS); +// senf::UNAddress addr2 = senf::UNAddress::fromPath(testp); +// BOOST_CHECK( testS == addr1.pathString()); +// BOOST_CHECK( testS == addr2.pathString()); } ///////////////////////////////cc.e//////////////////////////////////////// diff --git a/Socket/Protocols/UN/UNAddressing.cc b/Socket/Protocols/UN/UNAddressing.cc index 763d6674a41e0ff3adb0d04dd3f38057d3455e2e..2ae9b9565691ee74801b306a0c84e4a0a7d7ed0b 100644 --- a/Socket/Protocols/UN/UNAddressing.cc +++ b/Socket/Protocols/UN/UNAddressing.cc @@ -33,28 +33,20 @@ ///////////////////////////////cc.p//////////////////////////////////////// prefix_ senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path p) { - chdir(p.branch_path().string().c_str()); -//Check if the unix domain socket already exists... - if(!remove(p.leaf().c_str())) - printf("File already existed and therefore was deleted!\n"); - else - printf("File not found, will be created.\n"); - fflush(stdout); - - sockAddr.sun_family = AF_UNIX; - strcpy(sockAddr.sun_path, p.string().c_str()); + sockAddr.sun_family = AF_UNIX; + strcpy(sockAddr.sun_path, p.string().c_str()); } - prefix_ senf::UNSocketAddress fromString(std::string s) -{ +prefix_ senf::UNSocketAddress fromString(std::string s) { return senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path(s)); } - prefix_ senf::UNSocketAddress fromPath(boost::filesystem::path p) +prefix_ senf::UNSocketAddress fromPath(boost::filesystem::path p) { return senf::UNSocketAddress::UNSocketAddress(p); } - prefix_ std::string senf::UNSocketAddress::path() + +prefix_ std::string senf::UNSocketAddress::path() const { return std::string(sockAddr.sun_path); @@ -64,7 +56,7 @@ prefix_ sockaddr_un senf::UNSocketAddress::sockaddr() { struct sockaddr_un out; out.sun_family = sockAddr.sun_family; - strcpy(out.sun_path, sockAddr.sun_path); + strncpy(out.sun_path, sockAddr.sun_path, sizeof( out.sun_path)); return out; } @@ -81,6 +73,7 @@ prefix_ sockaddr const * senf::UNSocketAddress::sockaddr_p() } prefix_ unsigned senf::UNSocketAddress::sockaddr_len() + const { return sizeof(sockAddr); } diff --git a/Socket/Protocols/UN/UNAddressing.hh b/Socket/Protocols/UN/UNAddressing.hh index af121f089e22b0edfbd3d2f34dd52246e6935601..1116d1b655a0c9946a05c2bb19a3abb07f45c933 100644 --- a/Socket/Protocols/UN/UNAddressing.hh +++ b/Socket/Protocols/UN/UNAddressing.hh @@ -65,7 +65,7 @@ namespace senf { struct sockaddr_un sockaddr(); struct sockaddr * sockaddr_p() ; struct sockaddr const * sockaddr_p() const; - unsigned sockaddr_len(); + unsigned sockaddr_len() const; private: struct sockaddr_un sockAddr; }; @@ -91,7 +91,6 @@ namespace senf { GenericAddressingPolicy which see for a detailed documentation. */ - struct UNAddressingPolicy : public AddressingPolicyBase, private GenericAddressingPolicy<UNSocketAddress> diff --git a/Socket/Protocols/UN/UNAddressing.test.cc b/Socket/Protocols/UN/UNAddressing.test.cc index 7bd8e7fdabf281a215c33a30164511d9a5026c0f..2ed757b54dd8346b7c43a3483be4f670b15c1a7d 100644 --- a/Socket/Protocols/UN/UNAddressing.test.cc +++ b/Socket/Protocols/UN/UNAddressing.test.cc @@ -38,12 +38,13 @@ BOOST_AUTO_UNIT_TEST(unSocketAddress) { - std::string testS = "/tmp/senfTestSocket"; - senf::UNSocketAddress addr (testS) ; - int mySock = socket(AF_UNIX, SOCK_DGRAM, 0); - if (bind(mySock, addr.sockaddr_p(), addr.sockaddr_len())) { - std::cout << "Error while binding name to unix socket" << std::endl; - } +// TODO: muss wieder rein. +// std::string testS = "/tmp/senfTestSocket"; +// senf::UNSocketAddress addr (testS) ; +// int mySock = socket(AF_UNIX, SOCK_DGRAM, 0); +// if (bind(mySock, addr.sockaddr_p(), addr.sockaddr_len())) { +// std::cout << "Error while binding name to unix socket" << std::endl; +// } } diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.cc b/Socket/Protocols/UN/UNDatagramSocketHandle.cc index 89292060ac02a8df64c9b1bec250c258a3162921..53e2188508a5d95f3b64925be832baf1db31be3b 100644 --- a/Socket/Protocols/UN/UNDatagramSocketHandle.cc +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.cc @@ -46,7 +46,13 @@ prefix_ void senf::UNDatagramSocketProtocol::init_client() const prefix_ void senf::UNDatagramSocketProtocol::init_client(UNSocketAddress const & address) const { init_client(); - //bind(address); + bind(address); +} + +prefix_ std::auto_ptr<senf::SocketProtocol> senf::UNDatagramSocketProtocol::clone() + const +{ + return std::auto_ptr<SocketProtocol>(new UNDatagramSocketProtocol()); } ///////////////////////////////cc.e//////////////////////////////////////// diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.hh b/Socket/Protocols/UN/UNDatagramSocketHandle.hh index d8df9b836cef4ee474ef22e37584107c7269c95a..20c9977dc5dce1e603aa478e5903b035f9d38d91 100644 --- a/Socket/Protocols/UN/UNDatagramSocketHandle.hh +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.hh @@ -108,10 +108,6 @@ namespace senf { typedef ProtocolClientSocketHandle<UNDatagramSocketProtocol> UNDatagramClientSocketHandle; - typedef MakeSocketPolicy< - UNDatagramSocket_Policy, - UNAddressingPolicy - >::policy UNDatagramSocket_Policy; } ///////////////////////////////hh.e//////////////////////////////////////// //#include "UNDatagramSocketHandle.cci" diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc b/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc index 69e743e1a775929f9a0a8c333b99cce25c53c6a4..33a0e1f166d3f204b06a3bc8ab4cfea37a9e4073 100644 --- a/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc +++ b/Socket/Protocols/UN/UNDatagramSocketHandle.test.cc @@ -35,10 +35,26 @@ BOOST_AUTO_UNIT_TEST(unDatagramSocketHandle) { + std::string hallo = "Hallo Welt."; std::string testS = "/tmp/senfTestSocket"; + + if( unlink(testS.c_str()) != 0) + perror( "unlink failed"); + senf::UNSocketAddress addr (testS) ; - //senf::UNDatagramSocketHandle init_client(addr); - senf::UNDatagramClientSocketHandle inputSocket(senf::UNSocketAddress(tests)); + senf::UNDatagramClientSocketHandle inputSocket(addr); + senf::UNDatagramClientSocketHandle outputSocket; + + outputSocket.writeto( addr, hallo); + + BOOST_CHECK_EQUAL( inputSocket.read(), hallo); + outputSocket.close(); + inputSocket.close(); + + printf( "dasklfhsdlkfjsdkl\n"); + printf( "%s\n", testS.c_str()); + if( unlink(testS.c_str()) != 0) + perror( "unlink failed"); } diff --git a/Socket/Protocols/UN/UNProtocol.cc b/Socket/Protocols/UN/UNProtocol.cc index a659e92ebaed838024a3a01a029555778cc8764f..7f7f85fbd144925b672f5d4ba9c3d22b9e1dbaa2 100644 --- a/Socket/Protocols/UN/UNProtocol.cc +++ b/Socket/Protocols/UN/UNProtocol.cc @@ -26,11 +26,28 @@ // Custom includes #include <sys/socket.h> +#include <sys/ioctl.h> +#include <linux/sockios.h> // for SIOCINQ / SIOCOUTQ #include "../../../Utils/Exception.hh" //#include "UNProtocol.mpp" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// +prefix_ unsigned senf::UNProtocol::available() + const +{ + int n; + if (::ioctl(body().fd(),SIOCINQ,&n) < 0) + throw senf::SystemException(errno); + return n; +} + +prefix_ bool senf::UNProtocol::eof() + const +{ + return false; +} + prefix_ void senf::UNProtocol::connect(UNSocketAddress const & address) const { diff --git a/Socket/Protocols/UN/UNProtocol.hh b/Socket/Protocols/UN/UNProtocol.hh index b210c89548b97f95bafa2292a013ab5357135c1b..38e9edcde9ec72f4ed83714605092da62db477ff 100644 --- a/Socket/Protocols/UN/UNProtocol.hh +++ b/Socket/Protocols/UN/UNProtocol.hh @@ -58,7 +58,12 @@ namespace senf { /**< \todo make this obsolete by allowing access to the ClientSocketHandle from ConcreateSocketProtocol \param[in] address Address to set */ - }; + ///\name Abstract Interface Implementation + ///@{ + + unsigned available() const; + bool eof() const; + }; } ///////////////////////////////hh.e//////////////////////////////////////// diff --git a/Socket/Protocols/UN/UNProtocol.test.cc b/Socket/Protocols/UN/UNProtocol.test.cc index a2ceb76bcfc6b6a4d1126b1b4e020e1955e4fedf..b9be9695fcb7208824017260a440da989fbd835f 100644 --- a/Socket/Protocols/UN/UNProtocol.test.cc +++ b/Socket/Protocols/UN/UNProtocol.test.cc @@ -35,7 +35,7 @@ BOOST_AUTO_UNIT_TEST(unProtocol) { - std::string testS = "/tmp/senfTestSocket"; + //zZ leer }