vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Wed Dec 16 18:43:36 2015 +0200| [d3c0569cd25cb6eba33344a0a8fb6780e7753068] | committer: Rémi Denis-Courmont
tls: remove virtual_socket_t and clean send/recv prototypes up > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d3c0569cd25cb6eba33344a0a8fb6780e7753068 --- include/vlc_common.h | 1 - include/vlc_network.h | 8 ------ include/vlc_tls.h | 3 ++- modules/access/http/transport.c | 4 +-- modules/misc/gnutls.c | 55 +++++++++++++-------------------------- modules/misc/securetransport.c | 11 +++----- src/network/tls.c | 4 +-- 7 files changed, 28 insertions(+), 58 deletions(-) diff --git a/include/vlc_common.h b/include/vlc_common.h index b2e304f..86c2f27 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -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 */ diff --git a/include/vlc_network.h b/include/vlc_network.h index 078d3c5..221076b 100644 --- a/include/vlc_network.h +++ b/include/vlc_network.h @@ -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 ); diff --git a/include/vlc_tls.h b/include/vlc_tls.h index 48e5d70..a39aee6 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -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); }; /** diff --git a/modules/access/http/transport.c b/modules/access/http/transport.c index 2a93a2f..2f70dd4 100644 --- a/modules/access/http/transport.c +++ b/modules/access/http/transport.c @@ -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); diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c index fc73041..5330bf3 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -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); } /** diff --git a/modules/misc/securetransport.c b/modules/misc/securetransport.c index f9ba1bc..bc9bff2 100644 --- a/modules/misc/securetransport.c +++ b/modules/misc/securetransport.c @@ -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; diff --git a/src/network/tls.c b/src/network/tls.c index a153ddf..7b7bfa5 100644 --- a/src/network/tls.c +++ b/src/network/tls.c @@ -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; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
