📄 connectionmanagerimpl.java
字号:
/**
* $RCSfile: ConnectionManagerImpl.java,v $
* $Revision: 3159 $
* $Date: 2005-12-04 22:56:40 -0300 (Sun, 04 Dec 2005) $
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.wildfire.spi;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log;
import org.jivesoftware.wildfire.*;
import org.jivesoftware.wildfire.container.BasicModule;
import org.jivesoftware.wildfire.multiplex.MultiplexerPacketDeliverer;
import org.jivesoftware.wildfire.net.*;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ConnectionManagerImpl extends BasicModule implements ConnectionManager {
private SocketAcceptThread socketThread;
private SSLSocketAcceptThread sslSocketThread;
private SocketAcceptThread componentSocketThread;
private SocketAcceptThread serverSocketThread;
private SocketAcceptThread multiplexerSocketThread;
private ArrayList<ServerPort> ports;
private SessionManager sessionManager;
private PacketDeliverer deliverer;
private PacketRouter router;
private RoutingTable routingTable;
private String serverName;
private XMPPServer server;
private String localIPAddress = null;
// Used to know if the sockets can be started (the connection manager has been started)
private boolean isStarted = false;
// Used to know if the sockets have been started
private boolean isSocketStarted = false;
public ConnectionManagerImpl() {
super("Connection Manager");
ports = new ArrayList<ServerPort>(4);
}
private void createSocket() {
if (!isStarted || isSocketStarted || sessionManager == null || deliverer == null ||
router == null ||
serverName == null)
{
return;
}
isSocketStarted = true;
// Setup port info
try {
localIPAddress = InetAddress.getLocalHost().getHostAddress();
}
catch (UnknownHostException e) {
if (localIPAddress == null) {
localIPAddress = "Unknown";
}
}
// Start the port listener for s2s communication
startServerListener(localIPAddress);
// Start the port listener for Connections Multiplexers
startConnectionManagerListener(localIPAddress);
// Start the port listener for external components
startComponentListener(localIPAddress);
// Start the port listener for clients
startClientListeners(localIPAddress);
// Start the port listener for secured clients
startClientSSLListeners(localIPAddress);
}
private void startServerListener(String localIPAddress) {
// Start servers socket unless it's been disabled.
if (isServerListenerEnabled()) {
int port = getServerListenerPort();
try {
serverSocketThread = new SocketAcceptThread(this, new ServerPort(port, serverName,
localIPAddress, false, null, ServerPort.Type.server));
ports.add(serverSocketThread.getServerPort());
serverSocketThread.setDaemon(true);
serverSocketThread.setPriority(Thread.MAX_PRIORITY);
serverSocketThread.start();
List<String> params = new ArrayList<String>();
params.add(Integer.toString(serverSocketThread.getPort()));
Log.info(LocaleUtils.getLocalizedString("startup.server", params));
}
catch (Exception e) {
System.err.println("Error starting server listener on port " + port + ": " +
e.getMessage());
Log.error(LocaleUtils.getLocalizedString("admin.error.socket-setup"), e);
}
}
}
private void stopServerListener() {
if (serverSocketThread != null) {
serverSocketThread.shutdown();
ports.remove(serverSocketThread.getServerPort());
serverSocketThread = null;
}
}
private void startConnectionManagerListener(String localIPAddress) {
// Start multiplexers socket unless it's been disabled.
if (isConnectionManagerListenerEnabled()) {
int port = getConnectionManagerListenerPort();
try {
multiplexerSocketThread = new SocketAcceptThread(this, new ServerPort(port,
serverName, localIPAddress, false, null,
ServerPort.Type.connectionManager));
ports.add(multiplexerSocketThread.getServerPort());
multiplexerSocketThread.setDaemon(true);
multiplexerSocketThread.setPriority(Thread.MAX_PRIORITY);
multiplexerSocketThread.start();
List<String> params = new ArrayList<String>();
params.add(Integer.toString(multiplexerSocketThread.getPort()));
Log.info(LocaleUtils.getLocalizedString("startup.multiplexer", params));
}
catch (Exception e) {
System.err.println("Error starting multiplexer listener on port " + port + ": " +
e.getMessage());
Log.error(LocaleUtils.getLocalizedString("admin.error.socket-setup"), e);
}
}
}
private void stopConnectionManagerListener() {
if (multiplexerSocketThread != null) {
multiplexerSocketThread.shutdown();
ports.remove(multiplexerSocketThread.getServerPort());
multiplexerSocketThread = null;
}
}
private void startComponentListener(String localIPAddress) {
// Start components socket unless it's been disabled.
if (isComponentListenerEnabled()) {
int port = getComponentListenerPort();
try {
componentSocketThread = new SocketAcceptThread(this, new ServerPort(port,
serverName, localIPAddress, false, null, ServerPort.Type.component));
ports.add(componentSocketThread.getServerPort());
componentSocketThread.setDaemon(true);
componentSocketThread.setPriority(Thread.MAX_PRIORITY);
componentSocketThread.start();
List<String> params = new ArrayList<String>();
params.add(Integer.toString(componentSocketThread.getPort()));
Log.info(LocaleUtils.getLocalizedString("startup.component", params));
}
catch (Exception e) {
System.err.println("Error starting component listener on port " + port + ": " +
e.getMessage());
Log.error(LocaleUtils.getLocalizedString("admin.error.socket-setup"), e);
}
}
}
private void stopComponentListener() {
if (componentSocketThread != null) {
componentSocketThread.shutdown();
ports.remove(componentSocketThread.getServerPort());
componentSocketThread = null;
}
}
private void startClientListeners(String localIPAddress) {
// Start clients plain socket unless it's been disabled.
if (isClientListenerEnabled()) {
int port = getClientListenerPort();
try {
socketThread = new SocketAcceptThread(this, new ServerPort(port, serverName,
localIPAddress, false, null, ServerPort.Type.client));
ports.add(socketThread.getServerPort());
socketThread.setDaemon(true);
socketThread.setPriority(Thread.MAX_PRIORITY);
socketThread.start();
List<String> params = new ArrayList<String>();
params.add(Integer.toString(socketThread.getPort()));
Log.info(LocaleUtils.getLocalizedString("startup.plain", params));
}
catch (Exception e) {
System.err.println("Error starting XMPP listener on port " + port + ": " +
e.getMessage());
Log.error(LocaleUtils.getLocalizedString("admin.error.socket-setup"), e);
}
}
}
private void stopClientListeners() {
if (socketThread != null) {
socketThread.shutdown();
ports.remove(socketThread.getServerPort());
socketThread = null;
}
}
private void startClientSSLListeners(String localIPAddress) {
// Start clients SSL unless it's been disabled.
if (isClientSSLListenerEnabled()) {
int port = getClientSSLListenerPort();
String algorithm = JiveGlobals.getProperty("xmpp.socket.ssl.algorithm");
if ("".equals(algorithm) || algorithm == null) {
algorithm = "TLS";
}
try {
sslSocketThread = new SSLSocketAcceptThread(this, new ServerPort(port, serverName,
localIPAddress, true, algorithm, ServerPort.Type.client));
ports.add(sslSocketThread.getServerPort());
sslSocketThread.setDaemon(true);
sslSocketThread.setPriority(Thread.MAX_PRIORITY);
sslSocketThread.start();
List<String> params = new ArrayList<String>();
params.add(Integer.toString(sslSocketThread.getPort()));
Log.info(LocaleUtils.getLocalizedString("startup.ssl", params));
}
catch (Exception e) {
System.err.println("Error starting SSL XMPP listener on port " + port + ": " +
e.getMessage());
Log.error(LocaleUtils.getLocalizedString("admin.error.ssl"), e);
}
}
}
private void stopClientSSLListeners() {
if (sslSocketThread != null) {
sslSocketThread.shutdown();
ports.remove(sslSocketThread.getServerPort());
sslSocketThread = null;
}
}
public Iterator<ServerPort> getPorts() {
return ports.iterator();
}
public SocketReader createSocketReader(Socket sock, boolean isSecure, ServerPort serverPort,
boolean useBlockingMode) throws IOException {
if (serverPort.isClientPort()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -