Re: [PATCH] remote: Fix TLS transport on Windows

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/22/2010 01:42 PM, Matthias Bolte wrote:
>>> This doesn't entirely make any sense to me. GNUTLS also uses GNULIB,
>>> including all its socket wrappers for send/recv. If the push/pull
>>> function is NULL, gnulib does this
>>>
>>>      if (session->internals._gnutls_push_func == NULL)
>>>        {
>>>          i = send (GNUTLS_POINTER_TO_INT (fd), &ptr[n - left], left, 0);
>>>
> 
> Okay, yes GnuTLS uses gnulib, but they explicitly don't use gnulib's
> replacements for send() and recv() on Windows. See
> lib/gnutls_buffers.c:
> 
> /* We need to disable gnulib's replacement wrappers to get native
>    Windows interfaces. */
> #undef recv
> #undef send
> 
> GnuTLS decided to use the native Windows versions of send() and
> recv(). This cannot be changed, as that would break existing
> applications using GnuTLS on Windows relying on GnuTLS using the
> native Windows versions of send() and recv(). Therefore, I think my
> patch is necessary, as libvirt requires GnuTLS to use gnulib's
> replacement functions.

Makes sense to me.  However, why the double cast?

+#if HAVE_WINSOCK2_H
+static ssize_t
+custom_gnutls_push(void *s, const void *buf, size_t len)
+{
+    return send((int)(long)s, buf, len, 0);
+}
+
+static ssize_t
+custom_gnutls_pull(void *s, void *buf, size_t len)
+{
+    return recv((int)(long)s, buf, len, 0);
+}
+#endif

Wouldn't send((size_t)s, ...) be better than send((int)(long)s,...)?

-- 
Eric Blake   eblake@xxxxxxxxxx    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]