/* 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"); } } }
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(); }