removed some errors, added basic unit tests
[senf.git] / Socket / Protocols / UN / UNAddressing.cc
1 // $Id$
2 //
3 // Copyright (C) 2007 
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the
17 // Free Software Foundation, Inc.,
18 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19
20 /** \file
21     \brief UNAddressing non-inline non-template implementation */
22
23 #include "UNAddressing.hh"
24 //#include "UNAddressing.ih"
25
26 // Custom includes
27 #include <stdio.h>
28 #include <boost/operators.hpp>
29 #include <boost/filesystem/path.hpp>
30 #include "../../../Utils/SafeBool.hh"
31 //#include "UNAddressing.mpp"
32 #define prefix_
33 ///////////////////////////////cc.p////////////////////////////////////////
34 prefix_ senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path p)
35 {
36     chdir(p.branch_path().string().c_str());
37 //Check if the unix domain socket already exists...
38     if(!remove(p.leaf().c_str()))
39         printf("File already existed and therefore was deleted!\n");
40     else
41         printf("File not found, will be created.\n");
42     fflush(stdout);
43
44     sockAddr.sun_family = AF_UNIX; 
45     strcpy(sockAddr.sun_path, p.string().c_str());
46 }
47
48     prefix_ senf::UNSocketAddress fromString(std::string s)
49 {
50     return senf::UNSocketAddress::UNSocketAddress(boost::filesystem::path(s));
51 }
52
53     prefix_ senf::UNSocketAddress fromPath(boost::filesystem::path p)
54 {
55     return senf::UNSocketAddress::UNSocketAddress(p);
56 }
57     prefix_ std::string senf::UNSocketAddress::path()
58         const
59 {
60     return std::string(sockAddr.sun_path);
61 }
62
63 prefix_ sockaddr_un senf::UNSocketAddress::sockaddr()
64 {
65     struct sockaddr_un out; 
66     out.sun_family = sockAddr.sun_family;
67     strcpy(out.sun_path, sockAddr.sun_path);
68     return out; 
69 }
70
71 prefix_ sockaddr * senf::UNSocketAddress::sockaddr_p()
72 {
73     return reinterpret_cast <struct sockaddr  *> (&sockAddr); 
74 }
75
76
77 prefix_ sockaddr const  * senf::UNSocketAddress::sockaddr_p()
78     const
79 {
80     return reinterpret_cast <struct sockaddr const  *> (&sockAddr); 
81 }
82
83 prefix_ unsigned senf::UNSocketAddress::sockaddr_len()
84 {
85     return sizeof(sockAddr);
86 }
87
88 prefix_ std::ostream & operator<<(std::ostream & os, senf::UNSocketAddress::UNSocketAddress const & addr){
89     os << addr.path();
90     return os;
91 }
92
93
94 ///////////////////////////////cc.e////////////////////////////////////////
95 #undef prefix_
96 //#include "UNAddressing.mpp"
97
98 \f
99 // Local Variables:
100 // mode: c++
101 // fill-column: 100
102 // comment-column: 40
103 // c-file-style: "senf"
104 // indent-tabs-mode: nil
105 // ispell-local-dictionary: "american"
106 // compile-command: "scons -u test"
107 // End: