- gnutls_transport_set_ptr((gnutls_session_t) new_F->ssl, (gnutls_transport_ptr_t) rb_get_fd(new_F));
-
- if((ssl_err = gnutls_handshake((gnutls_session_t) new_F->ssl)) != 0)
- {
- switch(ssl_err)
- {
- case GNUTLS_E_INTERRUPTED:
- if(rb_ignore_errno(errno))
- case GNUTLS_E_AGAIN:
- {
- int flags;
-
- if(gnutls_record_get_direction((gnutls_session_t) new_F->ssl))
- flags = RB_SELECT_WRITE;
- else
- flags = RB_SELECT_READ;
-
- new_F->ssl_errno = ssl_err;
- rb_setselect(new_F, flags, rb_ssl_tryaccept, NULL);
- return;
- }
- break;
- default:
- new_F->ssl_errno = ssl_err;
- new_F->accept->callback(new_F, RB_ERROR_SSL, NULL, 0, new_F->accept->data);
- return;
- }
- }
- else
+ gnutls_init(ssl, GNUTLS_SERVER);
+ gnutls_set_default_priority(*ssl);
+ gnutls_credentials_set(*ssl, GNUTLS_CRD_CERTIFICATE, x509);
+ gnutls_dh_set_prime_bits(*ssl, 1024);
+ gnutls_transport_set_ptr(*ssl, (gnutls_transport_ptr_t) (long int)new_F->fd);
+ if(do_ssl_handshake(new_F, rb_ssl_tryaccept))