加载连接

ConnectionManagerImpl

ConnectionManagerImpl()
public ConnectionManagerImpl() throws IOException
{
	super("Connection Manager");

	InetAddress bindAddress = null;
	InetAddress adminConsoleBindAddress = null;

	try
	{
		bindAddress = getListenAddress();
	}
	catch ( UnknownHostException e )
	{
		Log.warn( "Unable to resolve bind address: ", e );
	}

	try
	{
		adminConsoleBindAddress = getAdminConsoleListenAddress();
		if( adminConsoleBindAddress == null )
		{
			adminConsoleBindAddress = bindAddress;
		}
	}
	catch( UnknownHostException e )
	{
		Log.warn(  "Unable to resolve admin console bind address: ", e );
	}

	final CertificateStoreManager certificateStoreManager = XMPPServer.getInstance().getCertificateStoreManager();

	// client-to-server
	clientListener = new ConnectionListener(
			ConnectionType.SOCKET_C2S,
			ConnectionSettings.Client.PORT,
			DEFAULT_PORT,
			ConnectionSettings.Client.SOCKET_ACTIVE,
			ConnectionSettings.Client.MAX_THREADS,
			ConnectionSettings.Client.MAX_READ_BUFFER,
			ConnectionSettings.Client.TLS_POLICY,
			ConnectionSettings.Client.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.SOCKET_C2S ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.SOCKET_C2S ),
			ConnectionSettings.Client.COMPRESSION_SETTINGS
	);
	clientSslListener = new ConnectionListener(
			ConnectionType.SOCKET_C2S,
			ConnectionSettings.Client.OLD_SSLPORT,
			DEFAULT_SSL_PORT,
			ConnectionSettings.Client.ENABLE_OLD_SSLPORT,
			ConnectionSettings.Client.MAX_THREADS_SSL,
			ConnectionSettings.Client.MAX_READ_BUFFER_SSL,
			Connection.TLSPolicy.legacyMode.name(), // force legacy mode
			ConnectionSettings.Client.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.SOCKET_C2S ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.SOCKET_C2S ),
			ConnectionSettings.Client.COMPRESSION_SETTINGS
	);
	// BOSH / HTTP-bind
	boshListener = new ConnectionListener(
			ConnectionType.BOSH_C2S,
			HttpBindManager.HTTP_BIND_PORT,
			HttpBindManager.HTTP_BIND_PORT_DEFAULT,
			HttpBindManager.HTTP_BIND_ENABLED, // TODO this one property enables/disables both normal and legacymode port. Should be separated into two.
			HttpBindManager.HTTP_BIND_THREADS,
			null,
			Connection.TLSPolicy.disabled.name(), // StartTLS over HTTP? Should use boshSslListener instead.
			HttpBindManager.HTTP_BIND_AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.BOSH_C2S ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.BOSH_C2S ),
			ConnectionSettings.Client.COMPRESSION_SETTINGS // Existing code re-used the generic client compression property. Should we have a BOSH-specific one?
	);
	boshSslListener = new ConnectionListener(
			ConnectionType.BOSH_C2S,
			HttpBindManager.HTTP_BIND_SECURE_PORT,
			HttpBindManager.HTTP_BIND_SECURE_PORT_DEFAULT,
			HttpBindManager.HTTP_BIND_ENABLED, // TODO this one property enables/disables both normal and legacymode port. Should be separated into two.
			HttpBindManager.HTTP_BIND_THREADS,
			null,
			Connection.TLSPolicy.legacyMode.name(),
			HttpBindManager.HTTP_BIND_AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.BOSH_C2S ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.BOSH_C2S ),
			ConnectionSettings.Client.COMPRESSION_SETTINGS // Existing code re-used the generic client compression property. Should we have a BOSH-specific one?
	);
	// server-to-server (federation)
	serverListener = new ConnectionListener(
			ConnectionType.SOCKET_S2S,
			ConnectionSettings.Server.PORT,
			DEFAULT_SERVER_PORT,
			ConnectionSettings.Server.SOCKET_ACTIVE,
			"xmpp.server.processing.threads",
			null,
			ConnectionSettings.Server.TLS_POLICY,
			ConnectionSettings.Server.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.SOCKET_S2S ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.SOCKET_S2S ),
			ConnectionSettings.Server.COMPRESSION_SETTINGS
	);
	// external components (XEP 0114)
	componentListener = new ConnectionListener(
			ConnectionType.COMPONENT,
			ConnectionSettings.Component.PORT,
			DEFAULT_COMPONENT_PORT,
			ConnectionSettings.Component.SOCKET_ACTIVE,
			ConnectionSettings.Component.MAX_THREADS,
			null,
			ConnectionSettings.Component.TLS_POLICY,
			ConnectionSettings.Component.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.COMPONENT ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.COMPONENT ),
			ConnectionSettings.Component.COMPRESSION_SETTINGS
	);
	componentSslListener = new ConnectionListener(
			ConnectionType.COMPONENT,
			ConnectionSettings.Component.OLD_SSLPORT,
			DEFAULT_COMPONENT_SSL_PORT,
			ConnectionSettings.Component.ENABLE_OLD_SSLPORT,
			ConnectionSettings.Component.MAX_THREADS_SSL,
			null,
			Connection.TLSPolicy.legacyMode.name(), // force legacy mode
			ConnectionSettings.Component.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.COMPONENT ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.COMPONENT ),
			ConnectionSettings.Component.COMPRESSION_SETTINGS
	);

	// Multiplexers (our propertietary connection manager implementation)
	connectionManagerListener = new ConnectionListener(
			ConnectionType.CONNECTION_MANAGER,
			ConnectionSettings.Multiplex.PORT,
			DEFAULT_MULTIPLEX_PORT,
			ConnectionSettings.Multiplex.SOCKET_ACTIVE,
			ConnectionSettings.Multiplex.MAX_THREADS,
			null,
			ConnectionSettings.Multiplex.TLS_POLICY,
			ConnectionSettings.Multiplex.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.CONNECTION_MANAGER ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.CONNECTION_MANAGER ),
			ConnectionSettings.Multiplex.COMPRESSION_SETTINGS
	);
	connectionManagerSslListener = new ConnectionListener(
			ConnectionType.CONNECTION_MANAGER,
			ConnectionSettings.Multiplex.OLD_SSLPORT,
			DEFAULT_MULTIPLEX_SSL_PORT,
			ConnectionSettings.Multiplex.ENABLE_OLD_SSLPORT,
			ConnectionSettings.Multiplex.MAX_THREADS_SSL,
			null,
			Connection.TLSPolicy.legacyMode.name(), // force legacy mode
			ConnectionSettings.Multiplex.AUTH_PER_CLIENTCERT_POLICY,
			bindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.CONNECTION_MANAGER ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.CONNECTION_MANAGER ),
			ConnectionSettings.Multiplex.COMPRESSION_SETTINGS
	);

	// Admin console (the Openfire web-admin) // TODO these use the XML properties instead of normal properties!
	webAdminListener = new ConnectionListener(
			ConnectionType.WEBADMIN,
			"adminConsole.port",
			9090,
			null,
			"adminConsole.serverThreads",
			null,
			Connection.TLSPolicy.disabled.name(), // StartTLS over HTTP? Should use webAdminSslListener instead.
			null,
			adminConsoleBindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.WEBADMIN ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.WEBADMIN ),
			null // Should we have compression on the admin console?
	);

	webAdminSslListener = new ConnectionListener(
			ConnectionType.WEBADMIN,
			"adminConsole.securePort",
			9091,
			null,
			"adminConsole.serverThreads",
			null,
			Connection.TLSPolicy.legacyMode.name(),
			null,
			adminConsoleBindAddress,
			certificateStoreManager.getIdentityStoreConfiguration( ConnectionType.WEBADMIN ),
			certificateStoreManager.getTrustStoreConfiguration( ConnectionType.WEBADMIN ),
			null // Should we have compression on the admin console?
	);

}

ConnectionListener

MINAConnectionAcceptor

Last updated