c158e8f273a7e4ce3f39a061fd78489ee24e0221
[senf.git] / senf / Socket / SocketHandle.cc
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Stefan Bund <g0dil@berlios.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \file
24     \brief SocketHandle non-inline non-template implementation
25  */
26
27 #include "SocketHandle.hh"
28 #include "SocketHandle.ih"
29
30 // Custom includes
31 #include <sstream>
32 #include <senf/Utils/TypeInfo.hh>
33
34 //#include "SocketHandle.mpp"
35 #define prefix_
36 //-/////////////////////////////////////////////////////////////////////////////////////////////////
37
38 //-/////////////////////////////////////////////////////////////////////////////////////////////////
39 // senf::SocketBody
40
41 prefix_ void senf::SocketBody::state(SocketStateMap & map, unsigned lod)
42 {
43     map["file.handle"]     << fd();
44     map["file.refcount"]   << refcount();
45     map["socket.server"]   << isServer();
46     map["socket.protocol"] << v_protocolName();
47     map["socket.protocol.policy"] << prettyName(typeid(protocol().policy()));
48     protocol().state(map,lod);
49 }
50
51 prefix_ void senf::SocketBody::v_close()
52 {
53     protocol().close();
54 }
55
56 prefix_ void senf::SocketBody::v_terminate()
57 {
58     protocol().terminate();
59 }
60
61 prefix_ bool senf::SocketBody::v_eof()
62     const
63 {
64     return protocol().eof();
65 }
66
67 //-/////////////////////////////////////////////////////////////////////////////////////////////////
68 // senf::detail::StateMapOrdering
69
70 namespace {
71     bool contains(std::string::const_iterator b, std::string::const_iterator e, char c)
72     {
73         for (; b != e; ++b)
74             if (*b == c)
75                 return true;
76         return false;
77     }
78 }
79
80 prefix_ std::string senf::detail::dumpState(SocketStateMap const & map)
81 {
82     std::stringstream s;
83     SocketStateMap::const_iterator i (map.begin());
84     SocketStateMap::const_iterator i_end (map.end());
85     for (; i != i_end; ++i)
86         s << i->first << ": " << i->second << "\n";
87     return s.str();
88 }
89
90 //-/////////////////////////////////////////////////////////////////////////////////////////////////
91 #undef prefix_
92 //#include "SocketHandle.mpp"
93
94 \f
95 // Local Variables:
96 // mode: c++
97 // fill-column: 100
98 // c-file-style: "senf"
99 // indent-tabs-mode: nil
100 // ispell-local-dictionary: "american"
101 // compile-command: "scons -u test"
102 // comment-column: 40
103 // End: