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(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org