The code doesn't properly handle IPv4 addresses that are mapped into the IPv6 address space.
http://tools.ietf.org/html/rfc4291#section-2.5.5.2
Code currently passes off to the IPv4 parser when it finds a '.', however the IPv4 parser doesn't handle it. Probably best to extract the IPv4 mapped address and then pass it into the ipv4 parser.