@@ -15,45 +15,61 @@ type Port = u16;
15
15
16
16
#[ deriving( Eq , TotalEq ) ]
17
17
pub enum IpAddr {
18
- Ipv4 ( u8 , u8 , u8 , u8 , Port ) ,
19
- Ipv6 ( u16 , u16 , u16 , u16 , u16 , u16 , u16 , u16 , Port )
18
+ Ipv4Addr ( u8 , u8 , u8 , u8 ) ,
19
+ Ipv6Addr ( u16 , u16 , u16 , u16 , u16 , u16 , u16 , u16 )
20
20
}
21
21
22
22
impl ToStr for IpAddr {
23
23
fn to_str ( & self ) -> ~str {
24
24
match * self {
25
- Ipv4 ( a, b, c, d, p ) =>
26
- fmt ! ( "%u.%u.%u.%u:%u " ,
27
- a as uint, b as uint, c as uint, d as uint, p as uint ) ,
25
+ Ipv4Addr ( a, b, c, d) =>
26
+ fmt ! ( "%u.%u.%u.%u" ,
27
+ a as uint, b as uint, c as uint, d as uint) ,
28
28
29
29
// Ipv4 Compatible address
30
- Ipv6 ( 0 , 0 , 0 , 0 , 0 , 0 , g, h, p ) => {
30
+ Ipv6Addr ( 0 , 0 , 0 , 0 , 0 , 0 , g, h) => {
31
31
let a = fmt ! ( "%04x" , g as uint) ;
32
32
let b = FromStrRadix :: from_str_radix ( a. slice ( 2 , 4 ) , 16 ) . unwrap ( ) ;
33
33
let a = FromStrRadix :: from_str_radix ( a. slice ( 0 , 2 ) , 16 ) . unwrap ( ) ;
34
34
let c = fmt ! ( "%04x" , h as uint) ;
35
35
let d = FromStrRadix :: from_str_radix ( c. slice ( 2 , 4 ) , 16 ) . unwrap ( ) ;
36
36
let c = FromStrRadix :: from_str_radix ( c. slice ( 0 , 2 ) , 16 ) . unwrap ( ) ;
37
37
38
- fmt ! ( "[ ::%u.%u.%u.%u]:%u " , a, b, c, d, p as uint )
38
+ fmt ! ( "::%u.%u.%u.%u" , a, b, c, d)
39
39
}
40
40
41
41
// Ipv4-Mapped address
42
- Ipv6 ( 0 , 0 , 0 , 0 , 0 , 1 , g, h, p ) => {
42
+ Ipv6Addr ( 0 , 0 , 0 , 0 , 0 , 1 , g, h) => {
43
43
let a = fmt ! ( "%04x" , g as uint) ;
44
44
let b = FromStrRadix :: from_str_radix ( a. slice ( 2 , 4 ) , 16 ) . unwrap ( ) ;
45
45
let a = FromStrRadix :: from_str_radix ( a. slice ( 0 , 2 ) , 16 ) . unwrap ( ) ;
46
46
let c = fmt ! ( "%04x" , h as uint) ;
47
47
let d = FromStrRadix :: from_str_radix ( c. slice ( 2 , 4 ) , 16 ) . unwrap ( ) ;
48
48
let c = FromStrRadix :: from_str_radix ( c. slice ( 0 , 2 ) , 16 ) . unwrap ( ) ;
49
49
50
- fmt ! ( "[ ::FFFF:%u.%u.%u.%u]:%u " , a, b, c, d, p as uint )
50
+ fmt ! ( "::FFFF:%u.%u.%u.%u" , a, b, c, d)
51
51
}
52
52
53
- Ipv6 ( a, b, c, d, e, f, g, h, p ) =>
54
- fmt ! ( "[ %x:%x:%x:%x:%x:%x:%x:%x]:%u " ,
53
+ Ipv6Addr ( a, b, c, d, e, f, g, h) =>
54
+ fmt ! ( "%x:%x:%x:%x:%x:%x:%x:%x" ,
55
55
a as uint, b as uint, c as uint, d as uint,
56
- e as uint, f as uint, g as uint, h as uint, p as uint)
56
+ e as uint, f as uint, g as uint, h as uint)
57
+ }
58
+ }
59
+ }
60
+
61
+ #[ deriving( Eq , TotalEq ) ]
62
+ pub struct SocketAddr {
63
+ ip : IpAddr ,
64
+ port : Port ,
65
+ }
66
+
67
+
68
+ impl ToStr for SocketAddr {
69
+ fn to_str ( & self ) -> ~str {
70
+ match self . ip {
71
+ Ipv4Addr ( * ) => fmt ! ( "%s:%u" , self . ip. to_str( ) , self . port as uint) ,
72
+ Ipv6Addr ( * ) => fmt ! ( "[%s]:%u" , self . ip. to_str( ) , self . port as uint) ,
57
73
}
58
74
}
59
75
}
0 commit comments