--- a/IPv6SocketAddress.st Tue Jul 16 09:34:25 2013 +0200
+++ b/IPv6SocketAddress.st Tue Jul 16 09:34:26 2013 +0200
@@ -207,6 +207,27 @@
^ self unsignedLongAt:25 bigEndian:false.
! !
+!IPv6SocketAddress methodsFor:'converting'!
+
+asIPv4SocketAddress
+ "convert a IPv4 addresse mapped to IPv6 into real IPv4 IPSocketAddress"
+
+ self isMappedIPv4 ifFalse:[
+ ConversionError raiseErrorString:'Trying to convert a non-mappable IPv6 address'.
+ ].
+
+ ^ IPSocketAddress hostAddress:(self copyFrom:21 to:24) port:self port.
+
+ "
+ (self addressString:'0:0:0:0:0:ffff::') asIPv4SocketAddress
+ (IPSocketAddress localHost port:80) asIPv6SocketAddress asIPv4SocketAddress
+ "
+!
+
+asIPv6SocketAddress
+ ^ self
+! !
+
!IPv6SocketAddress methodsFor:'printing & storing'!
printAddressOn:aStream
@@ -316,6 +337,17 @@
"
!
+isMappedIPv4
+ "answer true, if this is a mapped IPv4 address"
+
+ ^ (self at:9) == 0
+ and:[self sameContentsFrom:9 to:20 as:#[0 0 0 0 0 0 0 0 0 0 16rff 16rff] startingAt:1]
+
+ "
+ (self addressString:'0:0:0:0:0:ffff::') isMappedIPv4
+ "
+!
+
isMulticast
"answer true, if this address is a multicast address ff::/8"
@@ -332,10 +364,10 @@
!IPv6SocketAddress class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/IPv6SocketAddress.st,v 1.17 2013-07-11 15:02:10 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/IPv6SocketAddress.st,v 1.18 2013-07-16 07:34:26 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic2/IPv6SocketAddress.st,v 1.17 2013-07-11 15:02:10 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/IPv6SocketAddress.st,v 1.18 2013-07-16 07:34:26 stefan Exp $'
! !