12 hostname = (
const char *) gnutls_session_get_ptr (session);
14 int rc = gnutls_certificate_verify_peers3 (session, hostname, &status);
20 return GNUTLS_E_CERTIFICATE_ERROR;
33 void *tls_server_cred_,
37 _tls_client_cred (
NULL)
49 if (
options_.wss_trust_pem.length () > 0) {
50 gnutls_datum_t trust = {
51 (
unsigned char *)
options_.wss_trust_pem.c_str (),
52 (
unsigned int)
options_.wss_trust_pem.length ()};
53 rc = gnutls_certificate_set_x509_trust_mem (
61 rc = gnutls_init (&
_tls_session, GNUTLS_CLIENT | GNUTLS_NONBLOCK);
64 if (!hostname_.empty ())
66 hostname_.c_str (), hostname_.size ());
68 gnutls_session_set_ptr (
70 hostname_.empty () ?
NULL :
const_cast<char *
> (hostname_.c_str ()));
72 rc = gnutls_credentials_set (
_tls_session, GNUTLS_CRD_CERTIFICATE,
78 rc = gnutls_init (&
_tls_session, GNUTLS_SERVER | GNUTLS_NONBLOCK);
81 rc = gnutls_credentials_set (
_tls_session, GNUTLS_CRD_CERTIFICATE,
92 gnutls_deinit (_tls_session);
95 gnutls_certificate_free_credentials (_tls_client_cred);
114 int rc = gnutls_handshake (_tls_session);
118 if (rc == GNUTLS_E_SUCCESS) {
119 start_ws_handshake ();
122 }
else if (rc == GNUTLS_E_AGAIN) {
123 int direction = gnutls_record_get_direction (_tls_session);
128 }
else if (rc == GNUTLS_E_INTERRUPTED
129 || rc == GNUTLS_E_WARNING_ALERT_RECEIVED) {
142 if (!do_handshake ()) {
152 ssize_t rc = gnutls_record_recv (_tls_session,
data_, size_);
154 if (rc == GNUTLS_E_REHANDSHAKE) {
155 gnutls_alert_send (_tls_session, GNUTLS_AL_WARNING,
156 GNUTLS_A_NO_RENEGOTIATION);
160 if (rc == GNUTLS_E_INTERRUPTED) {
165 if (rc == GNUTLS_E_AGAIN) {
186 ssize_t rc = gnutls_record_send (_tls_session,
data_, size_);
188 if (rc == GNUTLS_E_INTERRUPTED || rc == GNUTLS_E_AGAIN) {