
On 02/15/2012 08:01 AM, Daniel Veillard wrote:
I completely missed this, I'm not sure I understand comment 2:
paphio:~/XML -> testURI --debug 'qemu+ssh://[3ffe::102]/system' scheme: qemu+ssh server: [3ffe::102] path: /system qemu+ssh://[3ffe::102]/system paphio:~/XML ->
Seems to me that libxml2 URI parsing works as expected if I look at http://www.ietf.org/rfc/rfc3986.txt which is the level of the URI spec that libxml2 implements:
so it seems to me that the "[" and "]" are part of the host address per the RFC spec and well libxml2 parsing is adequate. I'm not sure I understand the parsing problem,
It boils down to an ease-of-use question. Within a URI, I agree with you that IPv6 addresses in the 'host' element of 'authority' have a mandatory []. Outside of a URI, IPv6 addresses must not have [] for use in any other libc functions. So either all clients of libxml2 must strip [] when reading the server: field of the broken-down struct, and reinstate [] before asking libxml to reconstruct a valid URI, or libxml2 could be taught to provide some convenient hooks: server: remains as is server_cooked: new field, which matches server for IPv4 and hostnames, and which for IPv6 strips the [] and when constructing a URI from user-provided elements, automatically add in the needed [] around IPv6 addresses (which are otherwise invalid as they are not IPv4 nor hostnames) to create a valid URI without the user having to track []. However, since any ease-of-use improvements to libxml2 will only show up in new libxml2 versions, and we must still interoperate with old versions, I think this patch is on the right track of abstracting the fact that libvirt must manage [] (strip it on parse, re-add it on format) rather than relying on libxml2. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org