X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FSocket%2FProtocols%2FINet%2FINet4Address.cci;h=0232dd94e1b3d342a7c49947f2921b26fb03dda3;hb=b2fff1b50e0010fdad28cb638987cbf88032e30e;hp=107eb3fec9373814774ac1fe8b89fa7bc9e11275;hpb=7661548b20e6c7627f54bff87e0758396fd523ef;p=senf.git diff --git a/senf/Socket/Protocols/INet/INet4Address.cci b/senf/Socket/Protocols/INet/INet4Address.cci index 107eb3f..0232dd9 100644 --- a/senf/Socket/Protocols/INet/INet4Address.cci +++ b/senf/Socket/Protocols/INet/INet4Address.cci @@ -2,28 +2,34 @@ // // 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 //-///////////////////////////////////////////////////////////////////////////////////////////////// @@ -81,22 +87,6 @@ prefix_ bool senf::INet4Address::boolean_test() //-///////////////////////////////////////////////////////////////////////////////////////////////// // 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 @@ -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 { @@ -149,6 +146,25 @@ prefix_ senf::INet4Network senf::INet4Network::subnet(boost::uint32_t net, unsig } //-///////////////////////////////////////////////////////////////////////////////////////////////// +// 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)