ip: throw exception on parse error
This commit is contained in:
parent
bf5b0916e8
commit
08ac4b0e9d
10
ip.cpp.rl
10
ip.cpp.rl
@ -14,7 +14,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
|
* along with libgim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
* Copyright 2011-2016 Danny Robson <danny@nerdcruft.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -35,9 +35,9 @@ const ipv4::ip ipv4::ip::ANY ( 0, 0, 0, 0);
|
|||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
const util::range<ipv4::port> ipv4::WELL_KNOWN_PORT ( 0, 1023),
|
const util::range<ipv4::port_t> ipv4::WELL_KNOWN_PORT ( 0, 1023),
|
||||||
ipv4::REGISTERED_PORT ( 1024, 49151),
|
ipv4::REGISTERED_PORT ( 1024, 49151),
|
||||||
ipv4::PRIVATE_PORT (49152, 65535);
|
ipv4::PRIVATE_PORT (49152, 65535);
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -131,7 +131,7 @@ ipv4::ip::ip (const std::string &data)
|
|||||||
%%write exec;
|
%%write exec;
|
||||||
|
|
||||||
if (!__success)
|
if (!__success)
|
||||||
throw invalid_argument(data);
|
throw ipv4::error ();
|
||||||
|
|
||||||
m_octets[0] = __octets[0];
|
m_octets[0] = __octets[0];
|
||||||
m_octets[1] = __octets[1];
|
m_octets[1] = __octets[1];
|
||||||
|
23
ip.hpp
23
ip.hpp
@ -11,7 +11,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*
|
*
|
||||||
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
* Copyright 2011-2016 Danny Robson <danny@nerdcruft.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __UTIL_IP_HPP
|
#ifndef __UTIL_IP_HPP
|
||||||
@ -46,12 +46,15 @@ namespace ipv4 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef uint16_t port;
|
typedef uint16_t port_t;
|
||||||
typedef uint32_t mask;
|
typedef uint32_t mask_t;
|
||||||
|
|
||||||
|
extern const util::range<port_t> WELL_KNOWN_PORT,
|
||||||
|
REGISTERED_PORT,
|
||||||
|
PRIVATE_PORT;
|
||||||
|
|
||||||
|
class error : public std::exception { };
|
||||||
|
|
||||||
extern const util::range<port> WELL_KNOWN_PORT,
|
|
||||||
REGISTERED_PORT,
|
|
||||||
PRIVATE_PORT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -62,13 +65,15 @@ namespace ipv6 {
|
|||||||
explicit ip (const std::string&) { ; }
|
explicit ip (const std::string&) { ; }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef uint16_t port;
|
typedef uint16_t port_t;
|
||||||
|
|
||||||
struct mask {
|
struct mask_t {
|
||||||
uint32_t m_quads[4];
|
uint32_t m_quads[4];
|
||||||
|
|
||||||
explicit mask (uint32_t) { ; }
|
explicit mask_t (uint32_t) { ; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class error : public std::exception { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,18 +37,18 @@ namespace net {
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct address_types <domain::INET> {
|
struct address_types <domain::INET> {
|
||||||
typedef ipv4::ip ip;
|
typedef ipv4::ip ip;
|
||||||
typedef ipv4::mask mask;
|
typedef ipv4::mask_t mask_t;
|
||||||
typedef ipv4::port port;
|
typedef ipv4::port_t port_t;
|
||||||
typedef sockaddr_in sockaddr;
|
typedef sockaddr_in sockaddr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct address_types <domain::INET6> {
|
struct address_types <domain::INET6> {
|
||||||
typedef ipv6::ip ip;
|
typedef ipv6::ip ip;
|
||||||
typedef ipv6::mask mask;
|
typedef ipv6::mask_t mask_t;
|
||||||
typedef ipv6::port port;
|
typedef ipv6::port_t port_t;
|
||||||
typedef sockaddr_in6 sockaddr;
|
typedef sockaddr_in6 sockaddr;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -58,8 +58,8 @@ namespace net {
|
|||||||
class address {
|
class address {
|
||||||
public:
|
public:
|
||||||
typedef typename address_types<D>::ip ip_type;
|
typedef typename address_types<D>::ip ip_type;
|
||||||
typedef typename address_types<D>::mask mask_type;
|
typedef typename address_types<D>::mask_t mask_type;
|
||||||
typedef typename address_types<D>::port port_type;
|
typedef typename address_types<D>::port_t port_type;
|
||||||
typedef typename address_types<D>::sockaddr sockaddr_type;
|
typedef typename address_types<D>::sockaddr sockaddr_type;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Loading…
Reference in New Issue
Block a user