X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FUN%2FUNAddressing.cc;h=bcf16410c4cdd425fc0ed2fc294766a815dca03d;hb=3863d46dd898b7bc35ea8c6ccd8563b18762a6b6;hp=763d6674a41e0ff3adb0d04dd3f38057d3455e2e;hpb=f00a102138bcbabdaab1caab1db6a8876463dedc;p=senf.git diff --git a/Socket/Protocols/UN/UNAddressing.cc b/Socket/Protocols/UN/UNAddressing.cc index 763d667..bcf1641 100644 --- a/Socket/Protocols/UN/UNAddressing.cc +++ b/Socket/Protocols/UN/UNAddressing.cc @@ -1,7 +1,9 @@ -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum NETwork research (NET) -// David Wagner +// $Id$ +// +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// David Wagner // // 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 @@ -25,71 +27,19 @@ //#include "UNAddressing.ih" // Custom includes -#include -#include -#include +#include "../AddressExceptions.hh" #define prefix_ ///////////////////////////////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()); -} - - prefix_ senf::UNSocketAddress fromString(std::string s) -{ - return senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path(s)); -} - prefix_ senf::UNSocketAddress fromPath(boost::filesystem::path p) +prefix_ void senf::UNSocketAddress::path(std::string const & path) { - return senf::UNSocketAddress::UNSocketAddress(p); + if (path.size() > sizeof(sockaddr_un)-sizeof(short)-1) + throw AddressSyntaxException() << "UNSocketAddress path too long: " << path; + socklen(path.size()+sizeof(short)); + memcpy(addr_.sun_path, path.c_str(), socklen()-sizeof(short)); + addr_.sun_path[socklen()-sizeof(short)+1] = 0; } - prefix_ std::string senf::UNSocketAddress::path() - const -{ - return std::string(sockAddr.sun_path); -} - -prefix_ sockaddr_un senf::UNSocketAddress::sockaddr() -{ - struct sockaddr_un out; - out.sun_family = sockAddr.sun_family; - strcpy(out.sun_path, sockAddr.sun_path); - return out; -} - -prefix_ sockaddr * senf::UNSocketAddress::sockaddr_p() -{ - return reinterpret_cast (&sockAddr); -} - - -prefix_ sockaddr const * senf::UNSocketAddress::sockaddr_p() - const -{ - return reinterpret_cast (&sockAddr); -} - -prefix_ unsigned senf::UNSocketAddress::sockaddr_len() -{ - return sizeof(sockAddr); -} - -prefix_ std::ostream & operator<<(std::ostream & os, senf::UNSocketAddress::UNSocketAddress const & addr){ - os << addr.path(); - return os; -} - ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_