X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FSocket%2FProtocols%2FINet%2FINet4Address.cci;h=0232dd94e1b3d342a7c49947f2921b26fb03dda3;hb=HEAD;hp=1fd97b329c31cf702186d553645af2da601d8b69;hpb=3fe2ed38b800bcb57afff676698462e763724245;p=senf.git diff --git a/senf/Socket/Protocols/INet/INet4Address.cci b/senf/Socket/Protocols/INet/INet4Address.cci index 1fd97b3..0232dd9 100644 --- a/senf/Socket/Protocols/INet/INet4Address.cci +++ b/senf/Socket/Protocols/INet/INet4Address.cci @@ -2,33 +2,39 @@ // // Copyright (C) 2007 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// 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 -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief INet4Address inline non-template implementation */ // Custom includes +#include #define prefix_ inline -///////////////////////////////cci.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::INet4Address prefix_ senf::INet4Address::INet4Address() @@ -46,13 +52,13 @@ prefix_ senf::INet4Address senf::INet4Address::from_inaddr(inaddr_type v) prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref() { - return *reinterpret_cast(&(*this)[0]); + return *static_cast(static_cast((&(*this)[0]))); } prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref() const { - return *reinterpret_cast(&(*this)[0]); + return *static_cast(static_cast(&(*this)[0])); } prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr() @@ -78,26 +84,10 @@ prefix_ bool senf::INet4Address::boolean_test() return inaddr(); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::INet4Network -prefix_ unsigned senf::INet4Network::prefix_len() - const -{ - return prefix_len_; -} - -//////////////////////////////////////// -// private members - -prefix_ boost::uint32_t senf::INet4Network::mask() - const -{ - // This is correct as long as the system is using 2-complement arithmetic ... - return (~((boost::uint32_t(1u)<<(32u-prefix_len()))-1u)) & 0xFFFFFFFFu; -} - -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // public members prefix_ senf::INet4Network::INet4Network() @@ -105,7 +95,8 @@ prefix_ senf::INet4Network::INet4Network() {} prefix_ senf::INet4Network::INet4Network(INet4Address const & address, unsigned prefix_len) - : prefix_len_(prefix_len), address_(INet4Address(address.address() & mask())) + : prefix_len_( prefix_len_checked(prefix_len)), + address_(INet4Address(address.address() & mask())) {} prefix_ senf::INet4Address const & senf::INet4Network::address() @@ -114,6 +105,12 @@ prefix_ senf::INet4Address const & senf::INet4Network::address() return address_; } +prefix_ unsigned senf::INet4Network::prefix_len() + const +{ + return prefix_len_; +} + prefix_ bool senf::INet4Network::boolean_test() const { @@ -148,7 +145,26 @@ prefix_ senf::INet4Network senf::INet4Network::subnet(boost::uint32_t net, unsig return INet4Network(host(net << (32-prefix_len)),prefix_len); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// private members + +prefix_ unsigned senf::INet4Network::prefix_len_checked(unsigned prefix_len) + const +{ + if (prefix_len > 32) + throw AddressSyntaxException("invalid INet4 prefix length: " + + boost::lexical_cast(prefix_len)); + return prefix_len; +} + +prefix_ boost::uint32_t senf::INet4Network::mask() + const +{ + // This is correct as long as the system is using 2-complement arithmetic ... + return (~((boost::uint32_t(1u)<<(32u-prefix_len()))-1u)) & 0xFFFFFFFFu; +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// // namespace members prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4Network const & addr) @@ -157,7 +173,7 @@ prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4Network const & return os; } -///////////////////////////////cci.e/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_