@@ -82,31 +82,26 @@ class IPAddr
82
82
\z
83
83
}xi
84
84
85
- # Raised when the provided IP address is an invalid address.
86
- class InvalidAddress < ArgumentError ; end
87
-
88
- # Raised when the provided IP address is of an unsupported address family.
89
- class UnsupportedAddressFamily < ArgumentError ; end
85
+ # Generic IPAddr related error. Exceptions raised in this class should
86
+ # inherit from Error.
87
+ class Error < ArgumentError ; end
90
88
91
- # Raised when an octet contains a zero-filled number.
92
- # Example: 192.162.022.001
93
- class ZeroFilledNumber < ArgumentError ; end
94
-
95
- # Raised when an address is a mix of address families.
96
- class InconsistentAddressFamily < ArgumentError ; end
89
+ # Raised when the provided IP address is an invalid address.
90
+ class InvalidAddressError < Error ; end
97
91
98
- # Raised when an address family is unspecified and cannot be reliability
99
- # determined (for example: if an Integer is provided instead of a string).
100
- class UnspecifiedAddressFamily < ArgumentError ; end
92
+ # Raised when the address family is invalid such as an address with an
93
+ # unsupported family, an address with an inconsistent family, or an address
94
+ # who's family cannot be determined.
95
+ class AddressFamilyError < Error ; end
101
96
102
97
# Raised when the address is an invalid IPv4 address.
103
- class InvalidIPv4 < ArgumentError ; end
98
+ class InvalidIPv4Error < Error ; end
104
99
105
100
# Raised when the address is an invalid IPv6 address.
106
- class InvalidIPv6 < ArgumentError ; end
101
+ class InvalidIPv6Error < Error ; end
107
102
108
103
# Raised when the address is an invalid length.
109
- class InvalidLength < ArgumentError ; end
104
+ class InvalidPrefixError < Error ; end
110
105
111
106
# Returns the address family of this IP address.
112
107
attr_reader :family
@@ -126,7 +121,7 @@ def IPAddr::ntop(addr)
126
121
when 16
127
122
s = IN6FORMAT % addr . unpack ( 'n8' )
128
123
else
129
- raise UnsupportedAddressFamily , "unsupported address family"
124
+ raise AddressFamilyError , "unsupported address family"
130
125
end
131
126
return s
132
127
end
@@ -252,7 +247,7 @@ def hton
252
247
( @addr >> ( 112 - 16 * i ) ) & 0xffff
253
248
} . pack ( 'n8' )
254
249
else
255
- raise UnsupportedAddressFamily , "unsupported address family"
250
+ raise AddressFamilyError , "unsupported address family"
256
251
end
257
252
end
258
253
@@ -284,7 +279,7 @@ def ipv4_compat?
284
279
# into an IPv4-mapped IPv6 address.
285
280
def ipv4_mapped
286
281
if !ipv4?
287
- raise InvalidIPv4 , "not an IPv4 address"
282
+ raise InvalidIPv4Error , "not an IPv4 address"
288
283
end
289
284
return self . clone . set ( @addr | 0xffff00000000 , Socket ::AF_INET6 )
290
285
end
@@ -293,7 +288,7 @@ def ipv4_mapped
293
288
# into an IPv4-compatible IPv6 address.
294
289
def ipv4_compat
295
290
if !ipv4?
296
- raise InvalidIPv4 , "not an IPv4 address"
291
+ raise InvalidIPv4Error , "not an IPv4 address"
297
292
end
298
293
return self . clone . set ( @addr , Socket ::AF_INET6 )
299
294
end
@@ -317,22 +312,22 @@ def reverse
317
312
when Socket ::AF_INET6
318
313
return ip6_arpa
319
314
else
320
- raise UnsupportedAddressFamily , "unsupported address family"
315
+ raise AddressFamilyError , "unsupported address family"
321
316
end
322
317
end
323
318
324
319
# Returns a string for DNS reverse lookup compatible with RFC3172.
325
320
def ip6_arpa
326
321
if !ipv6?
327
- raise InvalidIPv6 , "not an IPv6 address"
322
+ raise InvalidIPv6Error , "not an IPv6 address"
328
323
end
329
324
return _reverse + ".ip6.arpa"
330
325
end
331
326
332
327
# Returns a string for DNS reverse lookup compatible with RFC1886.
333
328
def ip6_int
334
329
if !ipv6?
335
- raise InvalidIPv6 , "not an IPv6 address"
330
+ raise InvalidIPv6Error , "not an IPv6 address"
336
331
end
337
332
return _reverse + ".ip6.int"
338
333
end
@@ -372,7 +367,7 @@ def to_range
372
367
when Socket ::AF_INET6
373
368
end_addr = ( @addr | ( IN6MASK ^ @mask_addr ) )
374
369
else
375
- raise UnsupportedAddressFamily , "unsupported address family"
370
+ raise AddressFamilyError , "unsupported address family"
376
371
end
377
372
378
373
return clone . set ( begin_addr , @family ) ..clone . set ( end_addr , @family )
@@ -387,7 +382,7 @@ def inspect
387
382
when Socket ::AF_INET6
388
383
af = "IPv6"
389
384
else
390
- raise UnsupportedAddressFamily , "unsupported address family"
385
+ raise AddressFamilyError , "unsupported address family"
391
386
end
392
387
return sprintf ( "#<%s: %s:%s/%s>" , self . class . name ,
393
388
af , _to_string ( @addr ) , _to_string ( @mask_addr ) )
@@ -404,14 +399,14 @@ def set(addr, *family)
404
399
case family [ 0 ] ? family [ 0 ] : @family
405
400
when Socket ::AF_INET
406
401
if addr < 0 || addr > IN4MASK
407
- raise InvalidAddress , "invalid address"
402
+ raise InvalidAddressError , "invalid address"
408
403
end
409
404
when Socket ::AF_INET6
410
405
if addr < 0 || addr > IN6MASK
411
- raise InvalidAddress , "invalid address"
406
+ raise InvalidAddressError , "invalid address"
412
407
end
413
408
else
414
- raise UnsupportedAddressFamily , "unsupported address family"
409
+ raise AddressFamilyError , "unsupported address family"
415
410
end
416
411
@addr = addr
417
412
if family [ 0 ]
@@ -428,7 +423,7 @@ def mask!(mask)
428
423
else
429
424
m = IPAddr . new ( mask )
430
425
if m . family != @family
431
- raise InconsistentAddressFamily , "address family is not same"
426
+ raise AddressFamilyError , "address family is not same"
432
427
end
433
428
@mask_addr = m . to_i
434
429
@addr &= @mask_addr
@@ -440,18 +435,18 @@ def mask!(mask)
440
435
case @family
441
436
when Socket ::AF_INET
442
437
if prefixlen < 0 || prefixlen > 32
443
- raise InvalidLength , "invalid length"
438
+ raise InvalidPrefixError , "invalid length"
444
439
end
445
440
masklen = 32 - prefixlen
446
441
@mask_addr = ( ( IN4MASK >> masklen ) << masklen )
447
442
when Socket ::AF_INET6
448
443
if prefixlen < 0 || prefixlen > 128
449
- raise InvalidLength , "invalid length"
444
+ raise InvalidPrefixError , "invalid length"
450
445
end
451
446
masklen = 128 - prefixlen
452
447
@mask_addr = ( ( IN6MASK >> masklen ) << masklen )
453
448
else
454
- raise UnsupportedAddressFamily , "unsupported address family"
449
+ raise AddressFamilyError , "unsupported address family"
455
450
end
456
451
@addr = ( ( @addr >> masklen ) << masklen )
457
452
return self
@@ -485,9 +480,9 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
485
480
@mask_addr = ( family == Socket ::AF_INET ) ? IN4MASK : IN6MASK
486
481
return
487
482
when Socket ::AF_UNSPEC
488
- raise UnspecifiedAddressFamily , "address family must be specified"
483
+ raise AddressFamilyError , "address family must be specified"
489
484
else
490
- raise UnsupportedAddressFamily , "unsupported address family: #{ family } "
485
+ raise AddressFamilyError , "unsupported address family: #{ family } "
491
486
end
492
487
end
493
488
prefix , prefixlen = addr . split ( '/' )
@@ -510,7 +505,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
510
505
@family = Socket ::AF_INET6
511
506
end
512
507
if family != Socket ::AF_UNSPEC && @family != family
513
- raise InconsistentAddressFamily , "address family mismatch"
508
+ raise AddressFamilyError , "address family mismatch"
514
509
end
515
510
if prefixlen
516
511
mask! ( prefixlen )
@@ -539,8 +534,8 @@ def in_addr(addr)
539
534
octets = m . captures
540
535
end
541
536
octets . inject ( 0 ) { |i , s |
542
- ( n = s . to_i ) < 256 or raise InvalidAddress , "invalid address"
543
- s . match ( /\A 0./ ) and raise ZeroFilledNumber , "zero-filled number is ambiguous"
537
+ ( n = s . to_i ) < 256 or raise InvalidAddressError , "invalid address"
538
+ s . match ( /\A 0./ ) and raise InvalidIPv4Error , "zero-filled number is ambiguous"
544
539
i << 8 | n
545
540
}
546
541
end
@@ -557,18 +552,18 @@ def in6_addr(left)
557
552
right = ''
558
553
when RE_IPV6ADDRLIKE_COMPRESSED
559
554
if $4
560
- left . count ( ':' ) <= 6 or raise InvalidAddress , "invalid address"
555
+ left . count ( ':' ) <= 6 or raise InvalidAddressError , "invalid address"
561
556
addr = in_addr ( $~[ 4 , 4 ] )
562
557
left = $1
563
558
right = $3 + '0:0'
564
559
else
565
- left . count ( ':' ) <= 7 or raise InvalidAddress , "invalid address"
560
+ left . count ( ':' ) <= 7 or raise InvalidAddressError , "invalid address"
566
561
left = $1
567
562
right = $2
568
563
addr = 0
569
564
end
570
565
else
571
- raise InvalidAddress , "invalid address"
566
+ raise InvalidAddressError , "invalid address"
572
567
end
573
568
l = left . split ( ':' )
574
569
r = right . split ( ':' )
@@ -588,7 +583,7 @@ def addr_mask(addr)
588
583
when Socket ::AF_INET6
589
584
return addr & IN6MASK
590
585
else
591
- raise UnsupportedAddressFamily , "unsupported address family"
586
+ raise AddressFamilyError , "unsupported address family"
592
587
end
593
588
end
594
589
@@ -601,7 +596,7 @@ def _reverse
601
596
when Socket ::AF_INET6
602
597
return ( "%.32x" % @addr ) . reverse! . gsub! ( /.(?!$)/ , '\&.' )
603
598
else
604
- raise UnsupportedAddressFamily , "unsupported address family"
599
+ raise AddressFamilyError , "unsupported address family"
605
600
end
606
601
end
607
602
@@ -614,7 +609,7 @@ def _to_string(addr)
614
609
when Socket ::AF_INET6
615
610
return ( ( "%.32x" % addr ) . gsub! ( /.{4}(?!$)/ , '\&:' ) )
616
611
else
617
- raise UnsupportedAddressFamily , "unsupported address family"
612
+ raise AddressFamilyError , "unsupported address family"
618
613
end
619
614
end
620
615
@@ -741,13 +736,13 @@ def test_s_new
741
736
742
737
assert_equal("2001:200:300::", IPAddr.new("[2001:200:300::]/48").to_s)
743
738
744
- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new('192.168.0.256') }
745
- assert_raises(IPAddr::ZeroFilledNumber ) { IPAddr.new('192.168.0.011') }
746
- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new("fe80::1%fxp0") }
747
- assert_raises(IPAddr::InconsistentAddressFamily ) { IPAddr.new("::1/255.255.255.0") }
748
- assert_raises(IPAddr::UnspecifiedAddressFamily ) { IPAddr.new(1) }
749
- assert_raises(IPAddr::InconsistentAddressFamily ) { IPAddr.new("::ffff:192.168.1.2/120", Socket::AF_INET) }
750
- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new("[192.168.1.2]/120") }
739
+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new('192.168.0.256') }
740
+ assert_raises(IPAddr::InvalidIPv4Error ) { IPAddr.new('192.168.0.011') }
741
+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new("fe80::1%fxp0") }
742
+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new("::1/255.255.255.0") }
743
+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new(1) }
744
+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new("::ffff:192.168.1.2/120", Socket::AF_INET) }
745
+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new("[192.168.1.2]/120") }
751
746
end
752
747
753
748
def test_s_new_ntoh
@@ -808,14 +803,14 @@ def test_reverse
808
803
809
804
def test_ip6_arpa
810
805
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa)
811
- assert_raises(IPAddr::InvalidIPv6 ) {
806
+ assert_raises(IPAddr::InvalidIPv6Error ) {
812
807
IPAddr.new("192.168.2.1").ip6_arpa
813
808
}
814
809
end
815
810
816
811
def test_ip6_int
817
812
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int)
818
- assert_raises(IPAddr::InvalidIPv6 ) {
813
+ assert_raises(IPAddr::InvalidIPv6Error ) {
819
814
IPAddr.new("192.168.2.1").ip6_int
820
815
}
821
816
end
0 commit comments