Mercurial > hg > freeDiameter-dtls
diff libfdcore/cnxctx.c @ 1188:e1ced4db7f67
Backup work in progress on DTLS, not usable
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Tue, 11 Jun 2013 18:13:29 +0800 |
parents | 56c36d1007b4 |
children | 76ac4bb75f0e |
line wrap: on
line diff
--- a/libfdcore/cnxctx.c Mon Jun 10 12:05:38 2013 +0800 +++ b/libfdcore/cnxctx.c Tue Jun 11 18:13:29 2013 +0800 @@ -1136,13 +1136,8 @@ /* Prepare a gnutls session object for handshake */ int fd_tls_prepare(gnutls_session_t * session, int mode, int dtls, char * priority, void * alt_creds) { - if (dtls) { - LOG_E("DTLS sessions not yet supported"); - return ENOTSUP; - } - /* Create the session context */ - CHECK_GNUTLS_DO( gnutls_init (session, mode), return ENOMEM ); + CHECK_GNUTLS_DO( gnutls_init (session, mode | (dtls ? GNUTLS_DATAGRAM : 0 )), return ENOMEM ); /* Set the algorithm suite */ if (priority) { @@ -1152,6 +1147,11 @@ } else { CHECK_GNUTLS_DO( gnutls_priority_set( *session, fd_g_config->cnf_sec_data.prio_cache ), return EINVAL ); } + + /* Set DTLS-specific parameters */ + if (dtls) { + CHECK_FCT_DO( fd_sctp_dtls_prepare(*session), return EINVAL); + } /* Set the credentials of this side of the connection */ CHECK_GNUTLS_DO( gnutls_credentials_set (*session, GNUTLS_CRD_CERTIFICATE, alt_creds ?: fd_g_config->cnf_sec_data.credentials), return EINVAL ); @@ -1670,11 +1670,11 @@ CHECK_FCT( fd_sctp3436_init(conn) ); #endif /* DISABLE_SCTP */ } else { - /* Set the transport pointer passed to push & pull callbacks */ - GNUTLS_TRACE( gnutls_transport_set_ptr( conn->cc_tls_para.session, (gnutls_transport_ptr_t) conn ) ); - /* Set the push and pull callbacks */ if (!dtls) { + /* Set the transport pointer passed to push & pull callbacks */ + GNUTLS_TRACE( gnutls_transport_set_ptr( conn->cc_tls_para.session, (gnutls_transport_ptr_t) conn ) ); + #ifdef GNUTLS_VERSION_300 GNUTLS_TRACE( gnutls_transport_set_pull_timeout_function( conn->cc_tls_para.session, (void *)fd_cnx_s_select ) ); #endif /* GNUTLS_VERSION_300 */ @@ -1685,8 +1685,7 @@ GNUTLS_TRACE( gnutls_transport_set_vec_push_function(conn->cc_tls_para.session, (void *)fd_cnx_s_sendv) ); #endif /* GNUTLS_VERSION_212 */ } else { - TODO("DTLS push/pull functions"); - return ENOTSUP; + CHECK_FCT( fd_sctp_dtls_settransport(conn->cc_tls_para.session, conn) ); } } @@ -1752,9 +1751,7 @@ if (!dtls) { CHECK_POSIX( pthread_create( &conn->cc_rcvthr, NULL, rcvthr_tls_single, conn ) ); } else { - TODO("Signal the dtls_push function that multiple streams can be used from this point."); - TODO("Create DTLS rcvthr (must reassembly based on seq numbers & stream id ?)"); - return ENOTSUP; + CHECK_POSIX( pthread_create( &conn->cc_rcvthr, NULL, fd_sctp_dtls_rcvthr, conn ) ); } }