Commit d3c0569c authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

tls: remove virtual_socket_t and clean send/recv prototypes up

parent c2a21b27
......@@ -291,7 +291,6 @@ typedef struct filter_t filter_t;
typedef struct filter_sys_t filter_sys_t;
/* Network */
typedef struct virtual_socket_t v_socket_t;
typedef struct vlc_url_t vlc_url_t;
/* Misc */
......
......@@ -132,14 +132,6 @@ int net_Subscribe (vlc_object_t *obj, int fd, const struct sockaddr *addr,
VLC_API int net_SetCSCov( int fd, int sendcov, int recvcov );
/* Functions to read from or write to the networking layer */
struct virtual_socket_t
{
void *p_sys;
int (*pf_recv) ( void *, void *, size_t );
int (*pf_send) ( void *, const void *, size_t );
};
VLC_API ssize_t net_Read( vlc_object_t *p_this, int fd, void *p_data, size_t i_data );
#define net_Read(a,b,c,d) net_Read(VLC_OBJECT(a),b,c,d)
VLC_API ssize_t net_Write( vlc_object_t *p_this, int fd, const void *p_data, size_t i_data );
......
......@@ -43,7 +43,8 @@ struct vlc_tls
void *sys;
int fd;
struct virtual_socket_t sock;
ssize_t (*recv)(struct vlc_tls *, void *, size_t);
ssize_t (*send)(struct vlc_tls *, const void *, size_t);
};
/**
......
......@@ -54,7 +54,7 @@ ssize_t vlc_https_recv(vlc_tls_t *tls, void *buf, size_t len)
while (count < len)
{
int canc = vlc_savecancel();
ssize_t val = tls->sock.pf_recv(tls, (char *)buf + count, len - count);
ssize_t val = tls->recv(tls, (char *)buf + count, len - count);
vlc_restorecancel(canc);
......@@ -115,7 +115,7 @@ ssize_t vlc_https_send(vlc_tls_t *tls, const void *buf, size_t len)
while (count < len)
{
int canc = vlc_savecancel();
ssize_t val = tls->sock.pf_send(tls, (char *)buf + count, len - count);
ssize_t val = tls->send(tls, (char *)buf + count, len - count);
vlc_restorecancel(canc);
......
......@@ -163,14 +163,11 @@ static ssize_t vlc_gnutls_writev (gnutls_transport_ptr_t ptr,
/**
* Sends data through a TLS session.
*/
static int gnutls_Send (void *opaque, const void *buf, size_t length)
static ssize_t gnutls_Send (vlc_tls_t *tls, const void *buf, size_t length)
{
assert (opaque != NULL);
vlc_tls_t *tls = opaque;
gnutls_session_t session = tls->sys;
ssize_t val = gnutls_record_send (session, buf, length);
int val = gnutls_record_send (session, buf, length);
return (val < 0) ? gnutls_Error (tls, val) : val;
}
......@@ -178,14 +175,11 @@ static int gnutls_Send (void *opaque, const void *buf, size_t length)
/**
* Receives data through a TLS session.
*/
static int gnutls_Recv (void *opaque, void *buf, size_t length)
static ssize_t gnutls_Recv (vlc_tls_t *tls, void *buf, size_t length)
{
assert (opaque != NULL);
vlc_tls_t *tls = opaque;
gnutls_session_t session = tls->sys;
ssize_t val = gnutls_record_recv (session, buf, length);
int val = gnutls_record_recv (session, buf, length);
return (val < 0) ? gnutls_Error (tls, val) : val;
}
......@@ -255,9 +249,8 @@ static int gnutls_SessionOpen (vlc_tls_t *tls, int type,
gnutls_transport_set_vec_push_function (session, vlc_gnutls_writev);
#endif
tls->sys = session;
tls->sock.p_sys = NULL;
tls->sock.pf_send = gnutls_Send;
tls->sock.pf_recv = gnutls_Recv;
tls->send = gnutls_Send;
tls->recv = gnutls_Recv;
return VLC_SUCCESS;
error:
......@@ -332,9 +325,7 @@ static void gnutls_SessionClose (vlc_tls_t *tls)
{
gnutls_session_t session = tls->sys;
if (tls->sock.p_sys != NULL)
gnutls_bye (session, GNUTLS_SHUT_WR);
gnutls_bye (session, GNUTLS_SHUT_RDWR);
gnutls_deinit (session);
}
......@@ -375,17 +366,11 @@ static int gnutls_ClientHandshake (vlc_tls_t *tls, const char *host,
{
msg_Err (tls, "Certificate verification error: %s",
gnutls_strerror (val));
failure:
gnutls_bye (session, GNUTLS_SHUT_RDWR);
return -1;
}
if (status == 0)
{ /* Good certificate */
success:
tls->sock.p_sys = tls;
if (status == 0) /* Good certificate */
return 0;
}
/* Bad certificate */
gnutls_datum_t desc;
......@@ -402,7 +387,7 @@ success:
status &= ~GNUTLS_CERT_UNEXPECTED_OWNER; /* mismatched hostname */
if (status != 0 || host == NULL)
goto failure; /* Really bad certificate */
return -1; /* Really bad certificate */
/* Look up mismatching certificate in store */
const gnutls_datum_t *datum;
......@@ -412,7 +397,7 @@ success:
if (datum == NULL || count == 0)
{
msg_Err (tls, "Peer certificate not available");
goto failure;
return -1;
}
msg_Dbg (tls, "%u certificate(s) in the list", count);
......@@ -423,7 +408,7 @@ success:
{
case 0:
msg_Dbg (tls, "certificate key match for %s", host);
goto success;
return 0;
case GNUTLS_E_NO_CERTIFICATE_FOUND:
msg_Dbg (tls, "no known certificates for %s", host);
msg = N_("However the security certificate presented by the "
......@@ -439,7 +424,7 @@ success:
default:
msg_Err (tls, "certificate key match error for %s: %s", host,
gnutls_strerror (val));
goto failure;
return -1;
}
if (dialog_Question (tls, _("Insecure site"),
......@@ -449,17 +434,17 @@ success:
"If in doubt, abort now.\n"),
_("Abort"), _("View certificate"), NULL,
vlc_gettext (msg), host) != 2)
goto failure;
return -1;
gnutls_x509_crt_t cert;
if (gnutls_x509_crt_init (&cert))
goto failure;
return -1;
if (gnutls_x509_crt_import (cert, datum, GNUTLS_X509_FMT_DER)
|| gnutls_x509_crt_print (cert, GNUTLS_CRT_PRINT_ONELINE, &desc))
{
gnutls_x509_crt_deinit (cert);
goto failure;
return -1;
}
gnutls_x509_crt_deinit (cert);
......@@ -482,9 +467,9 @@ success:
if (val)
msg_Err (tls, "cannot store X.509 certificate: %s",
gnutls_strerror (val));
goto success;
return 0;
}
goto failure;
return -1;
}
/**
......@@ -558,12 +543,8 @@ static int gnutls_ServerSessionOpen (vlc_tls_creds_t *crd, vlc_tls_t *tls,
static int gnutls_ServerHandshake (vlc_tls_t *tls, const char *host,
const char *service, char **restrict alp)
{
int val = gnutls_ContinueHandshake (tls, alp);
if (val == 0)
tls->sock.p_sys = tls;
(void) host; (void) service;
return val;
return gnutls_ContinueHandshake (tls, alp);
}
/**
......
......@@ -422,9 +422,8 @@ static int st_Handshake (vlc_tls_t *session, const char *host,
/**
* Sends data through a TLS session.
*/
static int st_Send (void *opaque, const void *buf, size_t length)
static ssize_t st_Send (vlc_tls_t *session, const void *buf, size_t length)
{
vlc_tls_t *session = opaque;
vlc_tls_sys_t *sys = session->sys;
OSStatus ret = noErr;
......@@ -476,9 +475,8 @@ static int st_Send (void *opaque, const void *buf, size_t length)
/**
* Receives data through a TLS session.
*/
static int st_Recv (void *opaque, void *buf, size_t length)
static ssize_t st_Recv (vlc_tls_t *session, void *buf, size_t length)
{
vlc_tls_t *session = opaque;
vlc_tls_sys_t *sys = session->sys;
size_t actualSize;
......@@ -542,9 +540,8 @@ static int st_SessionOpenCommon (vlc_tls_creds_t *crd, vlc_tls_t *session,
sys->p_context = NULL;
session->sys = sys;
session->sock.p_sys = session;
session->sock.pf_send = st_Send;
session->sock.pf_recv = st_Recv;
session->send = st_Send;
session->recv = st_Recv;
crd->handshake = st_Handshake;
SSLContextRef p_context = NULL;
......
......@@ -235,7 +235,7 @@ int vlc_tls_Read(vlc_tls_t *session, void *buf, size_t len, bool waitall)
return -1;
}
ssize_t val = session->sock.pf_recv(session, buf, len);
ssize_t val = session->recv(session, buf, len);
if (val > 0)
{
if (!waitall)
......@@ -268,7 +268,7 @@ int vlc_tls_Write(vlc_tls_t *session, const void *buf, size_t len)
return -1;
}
ssize_t val = session->sock.pf_send(session, buf, len);
ssize_t val = session->send(session, buf, len);
if (val > 0)
{
buf = ((const char *)buf) + val;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment