Utils/Console: Console UDPServer
[senf.git] / Socket / Protocols / UN / UNAddressing.cc
index 4af13c0..09ee9c7 100644 (file)
@@ -1,7 +1,9 @@
-// Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum NETwork research (NET)
-//     David Wagner <david.wagner@fokus.fraunhofer.de>
+// $Id$
+//
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     David Wagner <dw6@berlios.de>
 //
 // 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
 //#include "UNAddressing.ih"
 
 // Custom includes
-#include <stdio.h>
-#include <boost/operators.hpp>
+#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 <struct sockaddr  *> (&addr_); 
-}
-
-prefix_ sockaddr const  * senf::UNSocketAddress::sockaddr_p()
-    const
-{
-    return reinterpret_cast <struct sockaddr const  *> (&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////////////////////////////////////////