Ejemplo n.º 1
0
/* Set own SASL context based on whether an external one is given or not */
static void
infd_xmpp_server_setup_own_sasl_context(InfdXmppServer* xmpp)
{
  InfdXmppServerPrivate* priv;

  priv = INFD_XMPP_SERVER_PRIVATE(xmpp);
  g_assert(priv->sasl_own_context == NULL);

  if(priv->sasl_context == NULL && priv->tcp != NULL)
  {
    /* Failure does not matter too much because every XMPP connection will
     * generate an own SASL context in this case, and error out if that
     * fails again. */
    priv->sasl_own_context = inf_sasl_context_new(NULL);

    if(priv->sasl_own_context != NULL)
    {
      priv->sasl_context = priv->sasl_own_context;
      inf_sasl_context_ref(priv->sasl_context);

      inf_sasl_context_set_callback(
        priv->sasl_context,
        infd_xmpp_server_sasl_cb,
        xmpp
      );

      g_object_notify(G_OBJECT(xmpp), "sasl-context");
    }
  }
}
Ejemplo n.º 2
0
Gobby::SelfHoster::SelfHoster(InfIo* io,
                              InfCommunicationManager* communication_manager,
                              InfLocalPublisher* publisher,
                              InfSaslContext* sasl_context,
                              StatusBar& status_bar,
                              CertificateManager& cert_manager,
                              const Preferences& preferences):
	m_sasl_context(sasl_context),
	m_status_bar(status_bar),
	m_cert_manager(cert_manager),
	m_preferences(preferences),
	m_dh_params_loaded(false),
	m_info_handle(status_bar.invalid_handle()),
	m_dh_params_message_handle(status_bar.invalid_handle()),
	m_directory(infd_directory_new(io, NULL, communication_manager)),
	m_server(io, publisher)
{
	inf_sasl_context_ref(m_sasl_context);

	if(m_preferences.user.keep_local_documents)
	{
		const std::string directory =
			m_preferences.user.host_directory;
		InfdFilesystemStorage* storage =
			infd_filesystem_storage_new(directory.c_str());
		g_object_set(G_OBJECT(m_directory), "storage", storage, NULL);
		g_object_unref(storage);
	}

	InfdServerPool* pool = infd_server_pool_new(m_directory);
	m_server.set_pool(pool);
	g_object_unref(pool);

	m_preferences.user.require_password.signal_changed().connect(
		sigc::mem_fun(
			*this, &SelfHoster::on_require_password_changed));
	/*m_preferences.user.password.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::on_password));*/

	m_preferences.user.allow_remote_access.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.user.port.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.user.keep_local_documents.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.user.host_directory.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.security.authentication_enabled.signal_changed().
		connect(sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.security.policy.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_preferences.network.keepalive.signal_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));
	m_cert_manager.signal_credentials_changed().connect(
		sigc::mem_fun(*this, &SelfHoster::apply_preferences));

	apply_preferences();
}