Beispiel #1
0
void
lm_sasl_free (LmSASL *sasl)
{
	g_return_if_fail (sasl != NULL);

	g_free (sasl->username);
	g_free (sasl->password);
	g_free (sasl->server);

	if (sasl->features_cb) {
		lm_connection_unregister_message_handler (sasl->connection,
							  sasl->features_cb, 
							  LM_MESSAGE_TYPE_STREAM_FEATURES);
	}

	if (sasl->challenge_cb) {
		lm_connection_unregister_message_handler (sasl->connection,
							  sasl->challenge_cb,
							  LM_MESSAGE_TYPE_CHALLENGE);
	}

	if (sasl->success_cb) {
		lm_connection_unregister_message_handler (sasl->connection,
							  sasl->success_cb,
							  LM_MESSAGE_TYPE_SUCCESS);
	}

	if (sasl->failure_cb) {
		lm_connection_unregister_message_handler (sasl->connection,
							  sasl->failure_cb,
							  LM_MESSAGE_TYPE_FAILURE);
	}

	g_free (sasl);
}
bool XMPPAccountHandler::tearDown()
{
	if (m_pConnection)
	{
		// unregister and destroy the message handler callbacks
		if (m_pPresenceHandler)
		{
			lm_connection_unregister_message_handler(m_pConnection, m_pPresenceHandler, LM_MESSAGE_TYPE_PRESENCE);
			lm_message_handler_unref(m_pPresenceHandler);
			m_pPresenceHandler = NULL;
		}
	
		if (m_pStreamErrorHandler)
		{
			lm_connection_unregister_message_handler(m_pConnection, m_pStreamErrorHandler, LM_MESSAGE_TYPE_STREAM_ERROR);
			lm_message_handler_unref(m_pStreamErrorHandler);
			m_pStreamErrorHandler = NULL;
		}

		if (m_pChatHandler)
		{
			lm_connection_unregister_message_handler(m_pConnection, m_pChatHandler, LM_MESSAGE_TYPE_MESSAGE);
			lm_message_handler_unref(m_pChatHandler);
			m_pChatHandler = NULL;
		}
	
		lm_connection_close(m_pConnection, NULL);
		lm_connection_unref(m_pConnection);
		m_pConnection = NULL;
	}
	m_bLoggedIn = false;
	return true;
}