vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun Nov 18 15:12:16 2018 +0200| [26f58486cb511327354ab08d5b9030273b7a71b3] | committer: Rémi Denis-Courmont
tls: use const callbacks struct for server > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=26f58486cb511327354ab08d5b9030273b7a71b3 --- include/vlc_tls.h | 10 +++++++--- modules/misc/gnutls.c | 12 ++++++++---- modules/misc/securetransport.c | 11 ++++++++--- src/network/tls.c | 4 ++-- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/include/vlc_tls.h b/include/vlc_tls.h index 48e4a77f25..7e4e179c8c 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -214,14 +214,18 @@ VLC_API vlc_tls_t *vlc_tls_ClientSessionCreate(vlc_tls_client_t *creds, typedef struct vlc_tls_server { struct vlc_common_members obj; - + const struct vlc_tls_server_operations *ops; void *sys; +} vlc_tls_server_t; + +struct vlc_tls_server_operations +{ vlc_tls_t *(*open)(struct vlc_tls_server *, vlc_tls_t *sock, const char *const *alpn); int (*handshake)(vlc_tls_t *session, char ** /*restrict*/ alp); void (*destroy)(struct vlc_tls_server *); -} vlc_tls_server_t; +}; /** * Allocates server TLS credentials. @@ -239,7 +243,7 @@ VLC_API vlc_tls_server_t *vlc_tls_ServerCreate(vlc_object_t *, static inline int vlc_tls_SessionHandshake(vlc_tls_server_t *crd, vlc_tls_t *tls) { - return crd->handshake(tls, NULL); + return crd->ops->handshake(tls, NULL); } /** diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c index 512db14233..23654bab1a 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -640,6 +640,13 @@ static void gnutls_ServerDestroy(vlc_tls_server_t *crd) free(sys); } +static const struct vlc_tls_server_operations gnutls_ServerOps = +{ + .open = gnutls_ServerSessionOpen, + .handshake = gnutls_ServerHandshake, + .destroy = gnutls_ServerDestroy, +}; + /** * Allocates a whole server's TLS credentials. */ @@ -720,11 +727,8 @@ static int OpenServer(vlc_tls_server_t *crd, const char *cert, const char *key) msg_Dbg (crd, "ciphers parameters loaded"); + crd->ops = &gnutls_ServerOps; crd->sys = sys; - crd->open = gnutls_ServerSessionOpen; - crd->handshake = gnutls_ServerHandshake; - crd->destroy = gnutls_ServerDestroy; - return VLC_SUCCESS; error: diff --git a/modules/misc/securetransport.c b/modules/misc/securetransport.c index 76d1f10772..1cae2e79f2 100644 --- a/modules/misc/securetransport.c +++ b/modules/misc/securetransport.c @@ -890,6 +890,13 @@ static void st_ServerDestroy (vlc_tls_server_t *crd) { free(sys); } +static const struct vlc_tls_server_operations st_ServerOps = +{ + .open = st_ServerSessionOpen, + .handshake = st_ServerHandshake, + .destroy = st_ServerDestroy, +}; + /** * Initializes server-side TLS credentials. */ @@ -994,10 +1001,8 @@ static int OpenServer (vlc_tls_server_t *crd, const char *cert, const char *key) sys->server_cert_chain = server_cert_chain; sys->whitelist = NULL; + crd->ops = &st_ServerOps; crd->sys = sys; - crd->open = st_ServerSessionOpen; - crd->handshake = st_ServerHandshake; - crd->destroy = st_ServerDestroy; out: if (policy) diff --git a/src/network/tls.c b/src/network/tls.c index fb7bb6e0c7..b7887add1e 100644 --- a/src/network/tls.c +++ b/src/network/tls.c @@ -93,7 +93,7 @@ void vlc_tls_ServerDelete(vlc_tls_server_t *crd) if (crd == NULL) return; - crd->destroy(crd); + crd->ops->destroy(crd); vlc_objres_clear(VLC_OBJECT(crd)); vlc_object_release(crd); } @@ -204,7 +204,7 @@ vlc_tls_t *vlc_tls_ServerSessionCreate(vlc_tls_server_t *crd, const char *const *alpn) { int canc = vlc_savecancel(); - vlc_tls_t *session = crd->open(crd, sock, alpn); + vlc_tls_t *session = crd->ops->open(crd, sock, alpn); vlc_restorecancel(canc); if (session != NULL) session->p = sock; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
