void CTlsSocket::Uninit() { UninitSession(); if (m_certCredentials) { gnutls_certificate_free_credentials(m_certCredentials); m_certCredentials = 0; } if (m_initialized) { m_initialized = false; gnutls_global_deinit(); } m_tlsState = noconn; delete [] m_peekData; m_peekData = 0; m_peekDataLen = 0; delete [] m_implicitTrustedCert.data; m_implicitTrustedCert.data = 0; m_require_root_trust = false; #if TLSDEBUG if (pLoggingControlSocket == m_pOwner) pLoggingControlSocket = 0; #endif }
bool CTlsSocket::CopySessionData(const CTlsSocket* pPrimarySocket) { gnutls_datum_t d; int res = gnutls_session_get_data2(pPrimarySocket->m_session, &d); if (res) { m_pOwner->LogMessage(MessageType::Debug_Warning, _T("gnutls_session_get_data2 on primary socket failed: %d"), res); return true; } // Set session data res = gnutls_session_set_data(m_session, d.data, d.size ); gnutls_free(d.data); if (res) { m_pOwner->LogMessage(MessageType::Debug_Info, _T("gnutls_session_set_data failed: %d. Going to reinitialize session."), res); UninitSession(); if (!InitSession()) return false; } else m_pOwner->LogMessage(MessageType::Debug_Info, _T("Trying to resume existing TLS session.")); return true; }
bool CTlsSocket::CopySessionData(const CTlsSocket* pPrimarySocket) { size_t session_data_size = 0; // Get buffer size int res = gnutls_session_get_data(pPrimarySocket->m_session, 0, &session_data_size); if (res && res != GNUTLS_E_SHORT_MEMORY_BUFFER ) { m_pOwner->LogMessage(Debug_Warning, _T("gnutls_session_get_data on primary socket failed: %d"), res); return true; } // Get session data char *session_data = new char[session_data_size]; res = gnutls_session_get_data(pPrimarySocket->m_session, session_data, &session_data_size); if (res) { delete [] session_data; m_pOwner->LogMessage(Debug_Warning, _T("gnutls_session_get_data on primary socket failed: %d"), res); return true; } // Set session data res = gnutls_session_set_data(m_session, session_data, session_data_size ); delete [] session_data; if (res) { m_pOwner->LogMessage(Debug_Info, _T("gnutls_session_set_data failed: %d. Going to reinitialize session."), res); UninitSession(); if (!InitSession()) return false; } else m_pOwner->LogMessage(Debug_Info, _T("Trying to resume existing TLS session.")); return true; }