X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FUN%2FUNAddressing.cc;h=09ee9c7ff6349c24438547a9e86364a576a5deb7;hb=731a143df4de38d4c8b0a81121990951971cd858;hp=56fe01987d1e3b244b93bbe385109028599968f6;hpb=ea8b2923c29a6902f507db2b485a44a58e9406f0;p=senf.git diff --git a/Socket/Protocols/UN/UNAddressing.cc b/Socket/Protocols/UN/UNAddressing.cc index 56fe019..09ee9c7 100644 --- a/Socket/Protocols/UN/UNAddressing.cc +++ b/Socket/Protocols/UN/UNAddressing.cc @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -27,73 +27,18 @@ //#include "UNAddressing.ih" // Custom includes -#include -#include +#include "../AddressExceptions.hh" #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ senf::UNSocketAddress::UNSocketAddress() -{} - -prefix_ senf::UNSocketAddress::UNSocketAddress(std::string p) -{ - clear(); - ::strncpy(addr_.sun_path, p.c_str(), sizeof(addr_.sun_path)); - addr_.sun_path[sizeof(addr_.sun_path)-1] = 0; -} - -prefix_ senf::UNSocketAddress fromString(std::string s) -{ - return senf::UNSocketAddress::UNSocketAddress(s); -} - -prefix_ bool senf::UNSocketAddress::operator==(UNSocketAddress const & other) - const -{ - return path() == other.path(); -} - -prefix_ std::string senf::UNSocketAddress::path() - const -{ - return std::string(addr_.sun_path); -} - -prefix_ bool senf::UNSocketAddress::boolean_test() - const -{ - return addr_.sun_path[0] != 0; -} - -prefix_ void senf::UNSocketAddress::clear() -{ - ::memset(&addr_, 0, sizeof(addr_)); - addr_.sun_family = AF_UNIX; -} - -prefix_ sockaddr * senf::UNSocketAddress::sockaddr_p() -{ - return reinterpret_cast (&addr_); -} - -prefix_ sockaddr const * senf::UNSocketAddress::sockaddr_p() - const -{ - return reinterpret_cast (&addr_); -} - -prefix_ unsigned senf::UNSocketAddress::sockaddr_len() - const -{ - return sizeof(addr_); -} - -prefix_ std::ostream & operator<<(std::ostream & os, - senf::UNSocketAddress::UNSocketAddress const & addr) +prefix_ void senf::UNSocketAddress::path(std::string const & path) { - os << addr.path(); - return os; + if (path.size() > sizeof(sockaddr_un)-sizeof(short)-1) + throw AddressSyntaxException() << "UNSocketAddress path too long: " << path; + socklen(path.size()+sizeof(short)); + strncpy(addr_.sun_path, path.c_str(), socklen()-sizeof(short)); + addr_.sun_path[socklen()-sizeof(short)+1] = 0; } ///////////////////////////////cc.e////////////////////////////////////////