#ifndef _VLC_TLS_H
# define _VLC_TLS_H
+# include "network.h"
+
struct tls_t
{
VLC_COMMON_MEMBERS
void *p_sys;
+ struct virtual_socket_t sock;
tls_session_t * (*pf_handshake) ( tls_session_t *, int );
void (*pf_close) ( tls_session_t * );
- int (*pf_send) ( tls_session_t *, const char *, int );
- int (*pf_recv) ( tls_session_t *, char *, int );
};
# define tls_SessionClose( a ) (((tls_session_t *)a)->pf_close (a))
# define __tls_ClientDelete( a ) tls_SessionClose( a )
-# define tls_Send( a, b, c ) (((tls_session_t *)a)->pf_send (a, b, c ))
+/* NOTE: It is assumed that a->sock.p_sys = a */
+# define tls_Send( a, b, c ) (((tls_session_t *)a)->sock.pf_send (a, b, c ))
-# define tls_Recv( a, b, c ) (((tls_session_t *)a)->pf_recv (a, b, c ))
+# define tls_Recv( a, b, c ) (((tls_session_t *)a)->sock.pf_recv (a, b, c ))
#endif
* Sends data through a TLS session.
*****************************************************************************/
static int
-gnutls_Send( tls_session_t *p_session, const char *buf, int i_length )
+gnutls_Send( void *p_session, const void *buf, int i_length )
{
int val;
- val = gnutls_record_send( *(gnutls_session *)(p_session->p_sys),
- buf, i_length );
+ val = gnutls_record_send( *(gnutls_session *)(((tls_session_t *)p_session)
+ ->p_sys), buf, i_length );
return val < 0 ? -1 : val;
}
* Receives data through a TLS session.
*****************************************************************************/
static int
-gnutls_Recv( tls_session_t *p_session, char *buf, int i_length )
+gnutls_Recv( void *p_session, void *buf, int i_length )
{
int val;
- val = gnutls_record_recv( *(gnutls_session *)(p_session->p_sys),
- buf, i_length );
+ val = gnutls_record_recv( *(gnutls_session *)(((tls_session_t *)p_session)
+ ->p_sys), buf, i_length );
return val < 0 ? -1 : val;
}
p_session->p_tls = p_tls;
p_session->p_server = NULL;
p_session->p_sys = p_sys;
+ p_session->sock.p_sys = p_session;
+ p_session->sock.pf_send = gnutls_Send;
+ p_session->sock.pf_recv = gnutls_Recv;
p_session->pf_handshake = gnutls_SessionHandshake;
p_session->pf_close = gnutls_SessionClose;
- p_session->pf_send = gnutls_Send;
- p_session->pf_recv = gnutls_Recv;
return p_session;
}
p_session->p_tls = p_server->p_tls;
p_session->p_server = p_server;
p_session->p_sys = p_sys;
+ p_session->sock.p_sys = p_session;
+ p_session->sock.pf_send = gnutls_Send;
+ p_session->sock.pf_recv = gnutls_Recv;
p_session->pf_handshake = gnutls_SessionHandshake;
p_session->pf_close = gnutls_SessionClose;
- p_session->pf_send = gnutls_Send;
- p_session->pf_recv = gnutls_Recv;
return p_session;
}