4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <stefan.bund@fokus.fraunhofer.de>
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.
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.
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.
24 \brief ClientSocketHandle inline template implementation
27 //#include "ClientSocketHandle.ih"
32 #define prefix_ inline
33 ///////////////////////////////cti.p///////////////////////////////////////
35 template <class Policy>
36 template <class OtherPolicy>
37 prefix_ senf::ClientSocketHandle<Policy>::
38 ClientSocketHandle(ClientSocketHandle<OtherPolicy> other,
39 typename SocketHandle<Policy>::template IsCompatible<OtherPolicy>::type *)
40 : SocketHandle<Policy>(other,true)
43 template <class Policy>
44 prefix_ senf::ClientSocketHandle<Policy>::ClientSocketHandle(FileHandle other,
46 : SocketHandle<Policy>(other, isChecked)
49 template <class Policy>
50 prefix_ senf::ClientSocketHandle<Policy>::
51 ClientSocketHandle(std::auto_ptr<SocketProtocol> protocol, int fd)
52 : SocketHandle<Policy>(protocol,false)
57 template <class Policy>
58 template <class OtherPolicy>
59 prefix_ typename senf::SocketHandle<Policy>::template IsCompatible<OtherPolicy>::type const &
60 senf::ClientSocketHandle<Policy>::operator=(ClientSocketHandle<OtherPolicy> other)
66 ///////////////////////////////////////////////////////////////////////////
68 ///////////////////////////////////////////////////////////////////////////
69 // reading and writing
71 template <class Policy>
72 prefix_ unsigned senf::ClientSocketHandle<Policy>::read(char * buffer,
75 return Policy::ReadPolicy::read(*this, buffer, size);
78 template <class Policy>
79 prefix_ unsigned senf::ClientSocketHandle<Policy>::
80 readfrom(char * buffer, unsigned size, typename Policy::AddressingPolicy::Address & from)
82 return Policy::ReadPolicy::readfrom(*this, buffer, size, from);
85 template <class Policy>
86 prefix_ unsigned senf::ClientSocketHandle<Policy>::write(char const * buffer,
89 return Policy::WritePolicy::write(*this, buffer, size);
92 template <class Policy>
93 prefix_ unsigned senf::ClientSocketHandle<Policy>::
94 writeto(typename boost::call_traits<typename Policy::AddressingPolicy::Address>::param_type addr,
95 std::string const & data)
97 return this->writeto(addr, data.data(), data.size());
100 template <class Policy>
101 prefix_ unsigned senf::ClientSocketHandle<Policy>::
102 writeto(typename boost::call_traits<typename Policy::AddressingPolicy::Address>::param_type addr,
103 char const * buffer, unsigned size)
105 return Policy::WritePolicy::writeto(*this, addr, buffer, size);
108 ///////////////////////////////////////////////////////////////////////////
111 template <class Policy>
112 prefix_ typename Policy::AddressingPolicy::Address
113 senf::ClientSocketHandle<Policy>::peer()
115 typename Policy::AddressingPolicy::Address addr;
120 template <class Policy>
121 prefix_ void senf::ClientSocketHandle<Policy>::
122 peer(typename Policy::AddressingPolicy::Address & addr)
124 Policy::AddressingPolicy::peer(*this,addr);
127 template <class Policy>
128 prefix_ typename Policy::AddressingPolicy::Address
129 senf::ClientSocketHandle<Policy>::local()
131 typename Policy::AddressingPolicy::Address addr;
136 template <class Policy>
137 prefix_ void senf::ClientSocketHandle<Policy>::
138 local(typename Policy::AddressingPolicy::Address & addr)
140 Policy::AddressingPolicy::local(*this,addr);
143 template <class Policy>
144 prefix_ void senf::ClientSocketHandle<Policy>::connect(AddressParam addr)
146 Policy::AddressingPolicy::connect(*this,addr);
149 template <class Policy>
150 prefix_ void senf::ClientSocketHandle<Policy>::
151 bind(typename boost::call_traits<typename Policy::AddressingPolicy::Address>::param_type addr)
153 Policy::AddressingPolicy::bind(*this,addr);
156 ///////////////////////////////////////////////////////////////////////////
159 template <class Policy>
160 prefix_ unsigned senf::ClientSocketHandle<Policy>::rcvbuf()
162 return Policy::BufferingPolicy::rcvbuf(*this);
165 template <class Policy>
166 prefix_ void senf::ClientSocketHandle<Policy>::rcvbuf(unsigned size)
168 Policy::BufferingPolicy::rcvbuf(*this,size);
171 template <class Policy>
172 prefix_ unsigned senf::ClientSocketHandle<Policy>::sndbuf()
174 return Policy::BufferingPolicy::sndbuf(*this);
177 template <class Policy>
178 prefix_ void senf::ClientSocketHandle<Policy>::sndbuf(unsigned size)
180 Policy::BufferingPolicy::sndbuf(*this,size);
183 ///////////////////////////////////////////////////////////////////////////
185 template <class Policy>
186 prefix_ senf::ClientSocketHandle<Policy>
187 senf::ClientSocketHandle<Policy>::cast_static(FileHandle handle)
189 return ClientSocketHandle(handle, true);
192 template <class Policy>
193 prefix_ senf::ClientSocketHandle<Policy>
194 senf::ClientSocketHandle<Policy>::cast_dynamic(FileHandle handle)
196 SocketHandle<Policy> h (SocketHandle<Policy>::cast_dynamic(handle));
197 if (static_cast<SocketBody&>(FileHandle::body(h)).isServer())
198 throw std::bad_cast();
199 return cast_static(handle);
202 template <class Policy>
203 prefix_ void senf::ClientSocketHandle<Policy>::state(SocketStateMap & map, unsigned lod)
205 map["handle"] = prettyName(typeid(*this));
206 this->body().state(map,lod);
209 template <class Policy>
210 prefix_ std::string senf::ClientSocketHandle<Policy>::dumpState(unsigned lod)
214 return detail::dumpState(map);
217 ///////////////////////////////cti.e///////////////////////////////////////
224 // c-file-style: "senf"
225 // indent-tabs-mode: nil
226 // ispell-local-dictionary: "american"