diff options
Diffstat (limited to 'knetwortdeconf/knetwortdeconf/kaddressvalidator.h')
-rw-r--r-- | knetwortdeconf/knetwortdeconf/kaddressvalidator.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/knetwortdeconf/knetwortdeconf/kaddressvalidator.h b/knetwortdeconf/knetwortdeconf/kaddressvalidator.h new file mode 100644 index 0000000..790703d --- /dev/null +++ b/knetwortdeconf/knetwortdeconf/kaddressvalidator.h @@ -0,0 +1,116 @@ +/*************************************************************************** + kaddressvalidator.h - description + ------------------- + begin : Wed Jan 22 2003 + copyright : (C) 2003 by Juan Luis Baptiste + email : jbaptiste@merlinux.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KADDRESSVALIDATOR_H +#define KADDRESSVALIDATOR_H + +/* + Class for validating IP address and netmasks, and to calculate network and broadcast values. + The functions to do the last two things where taken from the code of ipcalc.c, made by + Erik Troan <ewt@redhat.com> and Preston Brown <pbrown@redhat.com> from Red Hat Inc. +*/ + + + +/*! + \def IPBITS + \brief the number of bits in an IP address. +*/ +#define IPBITS (sizeof(TQ_UINT32) * 8) +/*! + \def IPBYTES + \brief the number of bytes in an IP address. +*/ +#define IPBYTES (sizeof(TQ_UINT32)) + +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <netinet/in.h> +#include <tqstring.h> + +/**Class that has simple methods for validating IP addresses, netmasks, calculating + broadcast and network addresses. + + *@author Juan Luis Baptiste + */ + +class KAddressValidator { +public: + KAddressValidator(); + ~KAddressValidator(); + /** Validates if the address written by the user is a valid one. Return true if it is and false if not. */ + static bool isValidIPAddress(TQString addr); + /** Validates if the Netmask written by the user is a valid one. Return true if it is and false if not. */ + static bool isNetmaskValid(TQString addr); +/** Validates if the Network written by the user is a valid one. Return true if it is and false if not. */ + static bool isNetworkValid(const TQString &addr); +/** Validates if the Broadcast written by the user is a valid one. Return true if it is and false if not. */ + static bool isBroadcastValid(TQString addr); + + /** Is a wrapper function to calc_network that receives the IP address and netsmask as TQString and + returns the network value also as a TQString, or NULL if it couldn't be calculated. */ + static TQString calculateNetwork(TQString addr,TQString netmask); +/** Is a wrapper function to calc_broadcast that receives the IP address and netsmask as TQString and +returns the broadcast value also as a TQString, or NULL if it couldn't be calculated. */ + static TQString calculateBroadcast(TQString addr, TQString netmask); + +private: // Private methods +/** \fn unsigned long int calc_broadcast(unsigned long int addr, int prefix) + + \brief calculate broadcast address given an IP address and a prefix length. + + \param addr an IP address in network byte order. + \param prefix a prefix length. + + \return the calculated broadcast address for the network, in network byte + order. */ + static unsigned long int calc_broadcast(unsigned long int addr, int prefix); + /** \fn unsigned long int calc_network(unsigned long int addr, int prefix) + \brief calculates the network address for a specified address and prefix. + + \param addr an IP address, in network byte order + \param prefix the network prefix + \return the base address of the network that addr is associated with, in + network byte order. */ + static unsigned long int calc_network(unsigned long int addr, int prefix); + /** \fn unsigned long int prefix2mask(int bits) + \brief creates a netmask from a specified number of bits + + This function converts a prefix length to a netmask. As CIDR (classless + internet domain internet domain routing) has taken off, more an more IP + addresses are being specified in the format address/prefix + (i.e. 192.168.2.3/24, with a corresponding netmask 255.255.255.0). If you + need to see what netmask corresponds to the prefix part of the address, this + is the function. See also \ref mask2prefix. + + \param prefix is the number of bits to create a mask for. + \return a network mask, in network byte order. + */ + static unsigned long int prefix2mask(int prefix); + /** \fn int mask2prefix(unsigned long int mask) + \brief calculates the number of bits masked off by a netmask. + + This function calculates the significant bits in an IP address as specified by + a netmask. See also \ref prefix2mask. + + \param mask is the netmask, specified as an unsigned long integer in network byte order. + \return the number of significant bits. */ + static int mask2prefix(unsigned long int mask); +}; + +#endif |