Removing SocketReceiver, SocketHubReceiver
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
index 2c6924b..347ea2b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
@@ -19,7 +19,6 @@
 import org.apache.log4j.AppenderSkeleton;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.net.SocketReceiver;
 import org.apache.log4j.rule.ExpressionRule;
 import org.apache.log4j.rule.Rule;
 import org.apache.log4j.spi.LoggerRepositoryEx;
@@ -127,29 +126,6 @@
     }
 
     /**
-     * A little test bed
-     *
-     * @param args
-     */
-    public static void main(String[] args) throws InterruptedException {
-        ChainsawAppenderHandler handler = new ChainsawAppenderHandler();
-        handler.addEventBatchListener(new EventBatchListener() {
-            public String getInterestedIdentifier() {
-                return null;
-            }
-
-            public void receiveEventBatch(String identifier, List<LoggingEvent> events) {
-                System.out.println("received " + events.size());
-            }
-        });
-        LogManager.getRootLogger().addAppender(handler);
-        SocketReceiver receiver = new SocketReceiver(4445);
-        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPlugin(receiver);
-        receiver.activateOptions();
-        Thread.sleep(60000);
-    }
-
-    /**
      * Exposes the current Data rate calculated. This is periodically updated by
      * an internal Thread as is the number of events that have been processed, and
      * dispatched to all listeners since the last sample period divided by the
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 2faa1bb..42e0409 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -20,7 +20,6 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.chainsaw.helper.SwingHelper;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.net.SocketReceiver;
 import org.apache.log4j.net.UDPReceiver;
 import org.apache.log4j.plugins.Receiver;
 
@@ -290,7 +289,6 @@
         networkReceiverPortComboBox.setOpaque(false);
 
         networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
-        networkReceiverClassNameComboBoxModel.addElement(SocketReceiver.class.getName());
         networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
 
         networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
index f6cccae..3dc30e6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
@@ -21,7 +21,6 @@
 import org.apache.log4j.chainsaw.help.HelpManager;
 import org.apache.log4j.chainsaw.helper.OkCancelPanel;
 import org.apache.log4j.chainsaw.messages.MessageCenter;
-import org.apache.log4j.net.SocketHubReceiver;
 import org.apache.log4j.plugins.Plugin;
 import org.apache.log4j.plugins.Receiver;
 
@@ -146,26 +145,6 @@
         return panel;
     }
 
-    public static void main(String[] args) throws Exception {
-
-        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-
-        NewReceiverDialogPanel panel = NewReceiverDialogPanel.create(
-            SocketHubReceiver.class);
-
-        JDialog dialog = new JDialog((JFrame) null, true);
-        dialog.getContentPane().add(panel);
-
-        ActionListener al = e -> System.exit(1);
-
-        panel.okPanel.getOkButton().addActionListener(al);
-        panel.okPanel.getCancelButton().addActionListener(al);
-
-        dialog.pack();
-
-        dialog.setVisible(true);
-    }
-
     /**
      * @return Returns the okPanel.
      */
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
index 01c41dc..12153ce 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
@@ -22,7 +22,6 @@
 import org.apache.log4j.chainsaw.ChainsawConstants;
 import org.apache.log4j.chainsaw.Generator;
 import org.apache.log4j.chainsaw.helper.TableCellEditorFactory;
-import org.apache.log4j.net.SocketHubReceiver;
 import org.apache.log4j.plugins.Plugin;
 
 import javax.swing.*;
@@ -112,38 +111,6 @@
         });
     }
 
-    public static void main(String[] args) {
-
-        JFrame frame = new JFrame("Property Editor Test bed");
-        frame.addWindowListener(new WindowAdapter() {
-            public void windowClosed(WindowEvent e) {
-                System.exit(1);
-            }
-        });
-
-        PluginPropertyEditorPanel panel = new PluginPropertyEditorPanel();
-
-
-        frame.getContentPane().add(panel);
-        frame.pack();
-
-        frame.setVisible(true);
-
-        SocketHubReceiver r = new SocketHubReceiver();
-
-        panel.setPlugin(r);
-
-        try {
-            Thread.sleep(3000);
-
-            panel.setPlugin(new Generator("MyPlugin"));
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-
-
-    }
-
     /**
      * @return Returns the plugin.
      */
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index 063b539..8764cd1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -33,7 +33,6 @@
 import org.apache.log4j.chainsaw.prefs.SettingsListener;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 import org.apache.log4j.net.SocketNodeEventListener;
-import org.apache.log4j.net.SocketReceiver;
 import org.apache.log4j.plugins.*;
 import org.apache.log4j.spi.LoggerRepository;
 import org.apache.log4j.spi.LoggerRepositoryEx;
@@ -376,19 +375,6 @@
                     updateReceiverTreeInDispatchThread();
                 }
             };
-
-        /**
-         * add this listener to all SocketReceivers
-         */
-        if (pluginRegistry != null) {
-            List socketReceivers =
-                pluginRegistry.getPlugins(SocketReceiver.class);
-
-            for (Object socketReceiver : socketReceivers) {
-                SocketReceiver element = (SocketReceiver) socketReceiver;
-                element.addSocketNodeEventListener(listener);
-            }
-        }
     }
 
     private void saveReceivers() {
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
index 0f363e4..accfdab 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
@@ -19,7 +19,6 @@
 
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
-import org.apache.log4j.net.SocketReceiver;
 import org.apache.log4j.plugins.Plugin;
 import org.apache.log4j.plugins.PluginEvent;
 import org.apache.log4j.plugins.PluginListener;
@@ -83,12 +82,6 @@
                 final DefaultMutableTreeNode receiverNode = new DefaultMutableTreeNode(item);
 
                 item.addPropertyChangeListener(creatPluginPropertyChangeListener(item, receiverNode));
-                if (item instanceof SocketReceiver) {
-                    for (Object details : ((SocketReceiver) item).getConnectedSocketDetails()) {
-                        receiverNode.add(new DefaultMutableTreeNode(details));
-                    }
-                }
-
                 getRootNode().add(receiverNode);
             }
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index 3f8ccf7..ba36fa3 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -91,8 +91,6 @@
     private static final String MULTICAST_APPENDER_SERVICE_NAME = "_log4j_xml_mcast_appender.local.";
     private static final String UDP_APPENDER_SERVICE_NAME = "_log4j_xml_udp_appender.local.";
     private static final String XML_SOCKET_APPENDER_SERVICE_NAME = "_log4j_xml_tcpconnect_appender.local.";
-    private static final String SOCKET_APPENDER_SERVICE_NAME = "_log4j_obj_tcpconnect_appender.local.";
-    private static final String SOCKETHUB_APPENDER_SERVICE_NAME = "_log4j_obj_tcpaccept_appender.local.";
     private static final String TCP_APPENDER_SERVICE_NAME = "_log4j._tcp.local.";
     private static final String NEW_UDP_APPENDER_SERVICE_NAME = "_log4j._udp.local.";
 
@@ -187,8 +185,6 @@
     private void registerServiceListenersForAppenders() {
         Set<String> serviceNames = new HashSet<>();
         serviceNames.add(MULTICAST_APPENDER_SERVICE_NAME);
-        serviceNames.add(SOCKET_APPENDER_SERVICE_NAME);
-        serviceNames.add(SOCKETHUB_APPENDER_SERVICE_NAME);
         serviceNames.add(UDP_APPENDER_SERVICE_NAME);
         serviceNames.add(XML_SOCKET_APPENDER_SERVICE_NAME);
         serviceNames.add(TCP_APPENDER_SERVICE_NAME);
@@ -481,16 +477,9 @@
         //TODO: add more checks (actual layout format, etc)
         if (TCP_APPENDER_SERVICE_NAME.equals(zone)) {
             //CHECK content type
-            //application/octet-stream = SocketReceiver
             //text/plain = VFSLogFilePatternReceiver (if structured=false)
             String contentType = info.getPropertyString("contentType").toLowerCase();
             //won't work with log4j2, as Chainsaw depends on log4j1.x
-            if ("application/octet-stream".equals(contentType)) {
-                SocketReceiver receiver = new SocketReceiver();
-                receiver.setPort(port);
-                receiver.setName(name + "-receiver");
-                return receiver;
-            }
             //this will work - regular text log files are fine
             if ("text/plain".equals(contentType)) {
                 VFSLogFilePatternReceiver receiver = new VFSLogFilePatternReceiver();
@@ -539,22 +528,6 @@
             return receiver;
         }
 
-        //SocketAppender
-        if (SOCKET_APPENDER_SERVICE_NAME.equals(zone)) {
-            SocketReceiver receiver = new SocketReceiver();
-            receiver.setPort(port);
-            receiver.setName(name + "-receiver");
-            return receiver;
-        }
-
-        //SocketHubAppender
-        if (SOCKETHUB_APPENDER_SERVICE_NAME.equals(zone)) {
-            SocketHubReceiver receiver = new SocketHubReceiver();
-            receiver.setHost(hostAddress);
-            receiver.setPort(port);
-            receiver.setName(name + "-receiver");
-            return receiver;
-        }
         //not recognized
         LogLog.debug("Unable to find receiver for appender with service name: " + zone);
         return null;
diff --git a/src/main/java/org/apache/log4j/net/SocketHubReceiver.java b/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
deleted file mode 100644
index 7cc398d..0000000
--- a/src/main/java/org/apache/log4j/net/SocketHubReceiver.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.plugins.Plugin;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.LoggerRepository;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * SocketHubReceiver receives a remote logging event on a configured
- * socket and "posts" it to a LoggerRepository as if the event was
- * generated locally. This class is designed to receive events from
- * the SocketHubAppender class (or classes that send compatible events).
- * <p>
- * <p>Once the event has been "posted", it will be handled by the
- * appenders currently configured in the LoggerRespository.
- *
- * @author Mark Womack
- * @author Ceki G&uuml;lc&uuml;
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketHubReceiver
-    extends Receiver implements SocketNodeEventListener, PortBased {
-
-    /**
-     * Default reconnection delay.
-     */
-    static final int DEFAULT_RECONNECTION_DELAY = 30000;
-
-    /**
-     * Host.
-     */
-    protected String host;
-
-    /**
-     * Port.
-     */
-    protected int port;
-    /**
-     * Reconnection delay.
-     */
-    protected int reconnectionDelay = DEFAULT_RECONNECTION_DELAY;
-
-    /**
-     * The MulticastDNS zone advertised by a SocketHubReceiver
-     */
-    public static final String ZONE = "_log4j_obj_tcpconnect_receiver.local.";
-
-    /**
-     * Active.
-     */
-    protected boolean active = false;
-
-    /**
-     * Connector.
-     */
-    protected Connector connector;
-
-    /**
-     * Socket.
-     */
-    protected SocketNode13 socketNode;
-
-    /**
-     * Listener list.
-     */
-    private final List listenerList = Collections.synchronizedList(new ArrayList());
-
-    private boolean advertiseViaMulticastDNS;
-    private ZeroConfSupport zeroConf;
-
-    /**
-     * Create new instance.
-     */
-    public SocketHubReceiver() {
-        super();
-    }
-
-    /**
-     * Create new instance.
-     *
-     * @param h host
-     * @param p port
-     */
-    public SocketHubReceiver(final String h,
-                             final int p) {
-        super();
-        host = h;
-        port = p;
-    }
-
-    /**
-     * Create new instance.
-     *
-     * @param h    host
-     * @param p    port
-     * @param repo logger repository
-     */
-    public SocketHubReceiver(final String h,
-                             final int p,
-                             final LoggerRepository repo) {
-        super();
-        host = h;
-        port = p;
-        repository = repo;
-    }
-
-    /**
-     * Adds a SocketNodeEventListener to this receiver to be notified
-     * of SocketNode events.
-     *
-     * @param l listener
-     */
-    public void addSocketNodeEventListener(final SocketNodeEventListener l) {
-        listenerList.add(l);
-    }
-
-    /**
-     * Removes a specific SocketNodeEventListener from this instance
-     * so that it will no  longer be notified of SocketNode events.
-     *
-     * @param l listener
-     */
-    public void removeSocketNodeEventListener(
-        final SocketNodeEventListener l) {
-        listenerList.remove(l);
-    }
-
-    /**
-     * Get the remote host to connect to for logging events.
-     *
-     * @return host
-     */
-    public String getHost() {
-        return host;
-    }
-
-    /**
-     * Configures the Host property, this will require activateOptions
-     * to be called for this to take effect.
-     *
-     * @param remoteHost address of remote host.
-     */
-    public void setHost(final String remoteHost) {
-        this.host = remoteHost;
-    }
-
-    /**
-     * Set the remote host to connect to for logging events.
-     * Equivalent to setHost.
-     *
-     * @param remoteHost address of remote host.
-     */
-    public void setPort(final String remoteHost) {
-        host = remoteHost;
-    }
-
-    /**
-     * Get the remote port to connect to for logging events.
-     *
-     * @return port
-     */
-    public int getPort() {
-        return port;
-    }
-
-    /**
-     * Set the remote port to connect to for logging events.
-     *
-     * @param p port
-     */
-    public void setPort(final int p) {
-        this.port = p;
-    }
-
-    /**
-     * The <b>ReconnectionDelay</b> option takes a positive integer
-     * representing the number of milliseconds to wait between each
-     * failed connection attempt to the server. The default value of
-     * this option is 30000 which corresponds to 30 seconds.
-     * <p>
-     * <p>Setting this option to zero turns off reconnection
-     * capability.
-     *
-     * @param delay milliseconds to wait or zero to not reconnect.
-     */
-    public void setReconnectionDelay(final int delay) {
-        int oldValue = this.reconnectionDelay;
-        this.reconnectionDelay = delay;
-        firePropertyChange("reconnectionDelay", oldValue, this.reconnectionDelay);
-    }
-
-    /**
-     * Returns value of the <b>ReconnectionDelay</b> option.
-     *
-     * @return value of reconnection delay option.
-     */
-    public int getReconnectionDelay() {
-        return reconnectionDelay;
-    }
-
-    /**
-     * Returns true if the receiver is the same class and they are
-     * configured for the same properties, and super class also considers
-     * them to be equivalent. This is used by PluginRegistry when determining
-     * if the a similarly configured receiver is being started.
-     *
-     * @param testPlugin The plugin to test equivalency against.
-     * @return boolean True if the testPlugin is equivalent to this plugin.
-     */
-    public boolean isEquivalent(final Plugin testPlugin) {
-        if (testPlugin != null && testPlugin instanceof SocketHubReceiver) {
-            SocketHubReceiver sReceiver = (SocketHubReceiver) testPlugin;
-
-            return (port == sReceiver.getPort()
-                && host.equals(sReceiver.getHost())
-                && reconnectionDelay == sReceiver.getReconnectionDelay()
-                && super.isEquivalent(testPlugin));
-        }
-        return false;
-    }
-
-    /**
-     * Sets the flag to indicate if receiver is active or not.
-     *
-     * @param b new value
-     */
-    protected synchronized void setActive(final boolean b) {
-        active = b;
-    }
-
-    /**
-     * Starts the SocketReceiver with the current options.
-     */
-    public void activateOptions() {
-        if (!isActive()) {
-            setActive(true);
-            if (advertiseViaMulticastDNS) {
-                zeroConf = new ZeroConfSupport(ZONE, port, getName());
-                zeroConf.advertise();
-            }
-
-            fireConnector(false);
-        }
-    }
-
-    /**
-     * Called when the receiver should be stopped. Closes the socket
-     */
-    public synchronized void shutdown() {
-        // mark this as no longer running
-        active = false;
-
-        // close the socket
-        try {
-            if (socketNode != null) {
-                socketNode.close();
-                socketNode = null;
-            }
-        } catch (Exception e) {
-            getLogger().info("Excpetion closing socket", e);
-            // ignore for now
-        }
-
-        // stop the connector
-        if (connector != null) {
-            connector.interrupted = true;
-            connector = null;  // allow gc
-        }
-        if (advertiseViaMulticastDNS) {
-            zeroConf.unadvertise();
-        }
-    }
-
-    /**
-     * Listen for a socketClosedEvent from the SocketNode. Reopen the
-     * socket if this receiver is still active.
-     *
-     * @param e exception not used.
-     */
-    public void socketClosedEvent(final Exception e) {
-        // if it is a non-normal closed event
-        // we clear the connector object here
-        // so that it actually does reconnect if the
-        // remote socket dies.
-        if (e != null) {
-            connector = null;
-            fireConnector(true);
-        }
-    }
-
-    /**
-     * Fire connectors.
-     *
-     * @param isReconnect true if reconnect.
-     */
-    private synchronized void fireConnector(final boolean isReconnect) {
-        if (active && connector == null) {
-            getLogger().debug("Starting a new connector thread.");
-            connector = new Connector(isReconnect);
-            connector.setDaemon(true);
-            connector.setPriority(Thread.MIN_PRIORITY);
-            connector.start();
-        }
-    }
-
-    /**
-     * Set socket.
-     *
-     * @param newSocket new value for socket.
-     */
-    private synchronized void setSocket(final Socket newSocket) {
-        connector = null;
-        socketNode = new SocketNode13(newSocket, this);
-        socketNode.addSocketNodeEventListener(this);
-
-        synchronized (listenerList) {
-            for (Object aListenerList : listenerList) {
-                SocketNodeEventListener listener =
-                    (SocketNodeEventListener) aListenerList;
-                socketNode.addSocketNodeEventListener(listener);
-            }
-        }
-        new Thread(socketNode).start();
-    }
-
-    public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
-        this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
-    }
-
-    public boolean isAdvertiseViaMulticastDNS() {
-        return advertiseViaMulticastDNS;
-    }
-
-    /**
-     * The Connector will reconnect when the server becomes available
-     * again.  It does this by attempting to open a new connection every
-     * <code>reconnectionDelay</code> milliseconds.
-     * <p>
-     * <p>It stops trying whenever a connection is established. It will
-     * restart to try reconnect to the server when previpously open
-     * connection is droppped.
-     *
-     * @author Ceki G&uuml;lc&uuml;
-     */
-    private final class Connector extends Thread {
-
-        /**
-         * Interruption status.
-         */
-        boolean interrupted = false;
-        /**
-         * If true, then delay on next iteration.
-         */
-        boolean doDelay;
-
-        /**
-         * Create new instance.
-         *
-         * @param isReconnect true if reconnecting.
-         */
-        public Connector(final boolean isReconnect) {
-            super();
-            doDelay = isReconnect;
-        }
-
-        /**
-         * Attempt to connect until interrupted.
-         */
-        public void run() {
-            while (!interrupted) {
-                try {
-                    if (doDelay) {
-                        getLogger().debug("waiting for " + reconnectionDelay
-                            + " milliseconds before reconnecting.");
-                        sleep(reconnectionDelay);
-                    }
-                    doDelay = true;
-                    getLogger().debug("Attempting connection to " + host);
-                    Socket s = new Socket(host, port);
-                    setSocket(s);
-                    getLogger().debug(
-                        "Connection established. Exiting connector thread.");
-                    break;
-                } catch (InterruptedException e) {
-                    getLogger().debug("Connector interrupted. Leaving loop.");
-                    return;
-                } catch (java.net.ConnectException e) {
-                    getLogger().debug("Remote host {} refused connection.", host);
-                } catch (IOException e) {
-                    getLogger().debug("Could not connect to {}. Exception is {}.",
-                        host, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * This method does nothing.
-     *
-     * @param remoteInfo remote info.
-     */
-    public void socketOpened(final String remoteInfo) {
-
-        // This method does nothing.
-    }
-}
diff --git a/src/main/java/org/apache/log4j/net/SocketNode13.java b/src/main/java/org/apache/log4j/net/SocketNode13.java
deleted file mode 100644
index 281fdb3..0000000
--- a/src/main/java/org/apache/log4j/net/SocketNode13.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.plugins.Pauseable;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.ComponentBase;
-import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-
-// Contributors:  Moses Hohman <mmhohman@rainbow.uchicago.edu>
-
-/**
- * Read {@link LoggingEvent} objects sent from a remote client using
- * Sockets (TCP). These logging events are logged according to local
- * policy, as if they were generated locally.
- * <p>
- * <p>For example, the socket node might decide to log events to a
- * local file and also resent them to a second socket node.
- * <p>
- * Implementation lifted from org.apache.log4j.net.SocketNode
- * in log4j 1.3 and renamed to prevent collision with
- * log4j 1.2 implementation.
- *
- * @author Ceki G&uuml;lc&uuml;
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketNode13 extends ComponentBase implements Runnable, Pauseable {
-
-    /**
-     * Paused state.
-     */
-    private boolean paused;
-    /**
-     * Closed state.
-     */
-    private boolean closed;
-    /**
-     * Socket.
-     */
-    private Socket socket;
-    /**
-     * Receiver.
-     */
-    private Receiver receiver;
-    /**
-     * List of listeners.
-     */
-    private final List listenerList = Collections.synchronizedList(new ArrayList());
-
-
-    /**
-     * Constructor for socket and logger repository.
-     *
-     * @param s         socket
-     * @param hierarchy logger repository
-     */
-    public SocketNode13(final Socket s,
-                        final LoggerRepository hierarchy) {
-        super();
-        this.socket = s;
-        this.repository = hierarchy;
-    }
-
-    /**
-     * Constructor for socket and receiver.
-     *
-     * @param s socket
-     * @param r receiver
-     */
-    public SocketNode13(final Socket s, final Receiver r) {
-        super();
-        this.socket = s;
-        this.receiver = r;
-    }
-
-    /**
-     * Set the event listener on this node.
-     *
-     * @param l listener
-     * @deprecated Now supports mutliple listeners, this method
-     * simply invokes the removeSocketNodeEventListener() to remove
-     * the listener, and then readds it.
-     */
-    public void setListener(final SocketNodeEventListener l) {
-        removeSocketNodeEventListener(l);
-        addSocketNodeEventListener(l);
-    }
-
-    /**
-     * Adds the listener to the list of listeners to be notified of the
-     * respective event.
-     *
-     * @param listener the listener to add to the list
-     */
-    public void addSocketNodeEventListener(
-        final SocketNodeEventListener listener) {
-        listenerList.add(listener);
-    }
-
-    /**
-     * Removes the registered Listener from this instances list of
-     * listeners.  If the listener has not been registered, then invoking
-     * this method has no effect.
-     *
-     * @param listener the SocketNodeEventListener to remove
-     */
-    public void removeSocketNodeEventListener(
-        final SocketNodeEventListener listener) {
-        listenerList.remove(listener);
-    }
-
-
-    /**
-     * Deserialize events from socket until interrupted.
-     */
-    public void run() {
-        LoggingEvent event;
-        Logger remoteLogger;
-        Exception listenerException = null;
-        ObjectInputStream ois;
-
-        try {
-            ois =
-                new ObjectInputStream(
-                    new BufferedInputStream(socket.getInputStream()));
-        } catch (Exception e) {
-            ois = null;
-            listenerException = e;
-            getLogger().error("Exception opening ObjectInputStream to " + socket, e);
-        }
-
-        if (ois != null) {
-
-            String hostName = socket.getInetAddress().getHostName();
-            String remoteInfo = hostName + ":" + socket.getPort();
-
-            /**
-             * notify the listener that the socket has been
-             * opened and this SocketNode is ready and waiting
-             */
-            fireSocketOpened(remoteInfo);
-
-            try {
-                while (!isClosed()) {
-                    // read an event from the wire
-                    event = (LoggingEvent) ois.readObject();
-                    event.setProperty(Constants.HOSTNAME_KEY, hostName);
-                    // store the known remote info in an event property
-                    event.setProperty("log4j.remoteSourceInfo", remoteInfo);
-
-                    // if configured with a receiver, tell it to post the event
-                    if (!isPaused() && !isClosed()) {
-                        if ((receiver != null)) {
-                            receiver.doPost(event);
-
-                            // else post it via the hierarchy
-                        } else {
-                            // get a logger from the hierarchy. The name of the logger
-                            // is taken to be the name contained in the event.
-                            remoteLogger = repository.getLogger(event.getLoggerName());
-
-                            //event.logger = remoteLogger;
-                            // apply the logger-level filter
-                            if (event
-                                .getLevel()
-                                .isGreaterOrEqual(remoteLogger.getEffectiveLevel())) {
-                                // finally log the event as if was generated locally
-                                remoteLogger.callAppenders(event);
-                            }
-                        }
-                    } else {
-                        //we simply discard this event.
-                    }
-                }
-            } catch (java.io.EOFException e) {
-                getLogger().info("Caught java.io.EOFException closing connection.");
-                listenerException = e;
-            } catch (java.net.SocketException e) {
-                getLogger().info("Caught java.net.SocketException closing connection.");
-                listenerException = e;
-            } catch (IOException e) {
-                getLogger().info("Caught java.io.IOException: " + e);
-                getLogger().info("Closing connection.");
-                listenerException = e;
-            } catch (Exception e) {
-                getLogger().error("Unexpected exception. Closing connection.", e);
-                listenerException = e;
-            }
-        }
-
-        // close the socket
-        try {
-            if (ois != null) {
-                ois.close();
-            }
-        } catch (Exception e) {
-            //getLogger().info("Could not close connection.", e);
-        }
-
-        // send event to listener, if configured
-        if (listenerList.size() > 0 && !isClosed()) {
-            fireSocketClosedEvent(listenerException);
-        }
-    }
-
-    /**
-     * Notifies all registered listeners regarding the closing of the Socket.
-     *
-     * @param listenerException listener exception
-     */
-    private void fireSocketClosedEvent(final Exception listenerException) {
-        synchronized (listenerList) {
-            for (Object aListenerList : listenerList) {
-                SocketNodeEventListener snel =
-                    (SocketNodeEventListener) aListenerList;
-                if (snel != null) {
-                    snel.socketClosedEvent(listenerException);
-                }
-            }
-        }
-    }
-
-    /**
-     * Notifies all registered listeners regarding the opening of a Socket.
-     *
-     * @param remoteInfo remote info
-     */
-    private void fireSocketOpened(final String remoteInfo) {
-        synchronized (listenerList) {
-            for (Object aListenerList : listenerList) {
-                SocketNodeEventListener snel =
-                    (SocketNodeEventListener) aListenerList;
-                if (snel != null) {
-                    snel.socketOpened(remoteInfo);
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets if node is paused.
-     *
-     * @param b new value
-     */
-    public void setPaused(final boolean b) {
-        this.paused = b;
-    }
-
-    /**
-     * Get if node is paused.
-     *
-     * @return true if pause.
-     */
-    public boolean isPaused() {
-        return this.paused;
-    }
-
-    /**
-     * Close the node and underlying socket
-     */
-    public void close() throws IOException {
-        getLogger().debug("closing socket");
-        this.closed = true;
-        socket.close();
-        fireSocketClosedEvent(null);
-    }
-
-    /**
-     * Get if node is closed.
-     *
-     * @return true if closed.
-     */
-    public boolean isClosed() {
-        return this.closed;
-    }
-}
diff --git a/src/main/java/org/apache/log4j/net/SocketReceiver.java b/src/main/java/org/apache/log4j/net/SocketReceiver.java
deleted file mode 100644
index b120142..0000000
--- a/src/main/java/org/apache/log4j/net/SocketReceiver.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.plugins.Pauseable;
-import org.apache.log4j.plugins.Plugin;
-import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.util.*;
-
-
-/**
- * SocketReceiver receives a remote logging event on a configured
- * socket and "posts" it to a LoggerRepository as if the event was
- * generated locally. This class is designed to receive events from
- * the SocketAppender class (or classes that send compatible events).
- * <p>
- * <p>Once the event has been "posted", it will be handled by the
- * appenders currently configured in the LoggerRespository.
- *
- * @author Mark Womack
- * @author Scott Deboy (sdeboy@apache.org)
- * @author Paul Smith (psmith@apache.org)
- */
-public class SocketReceiver extends Receiver implements Runnable, PortBased,
-    Pauseable {
-    /**
-     * socket map.
-     */
-    private Map<Socket, SocketNode13> socketMap = new HashMap<>();
-    /**
-     * Paused.
-     */
-    private boolean paused;
-    /**
-     * Thread.
-     */
-    private Thread rThread;
-    /**
-     * Port.
-     */
-    protected int port;
-    /**
-     * Server socket.
-     */
-    private ServerSocket serverSocket;
-    /**
-     * Socket list.
-     */
-    private Vector<Socket> socketList = new Vector<>();
-
-    /**
-     * The MulticastDNS zone advertised by a SocketReceiver
-     */
-    public static final String ZONE = "_log4j_obj_tcpaccept_receiver.local.";
-
-    /**
-     * Listener.
-     */
-    private SocketNodeEventListener listener = null;
-    /**
-     * Listeners.
-     */
-    private final List listenerList = Collections.synchronizedList(new ArrayList());
-    private boolean advertiseViaMulticastDNS;
-    private ZeroConfSupport zeroConf;
-
-    /**
-     * Create new instance.
-     */
-    public SocketReceiver() {
-        super();
-    }
-
-    /**
-     * Create new instance.
-     *
-     * @param p port
-     */
-    public SocketReceiver(final int p) {
-        super();
-        port = p;
-    }
-
-    /**
-     * Create new instance.
-     *
-     * @param p    port
-     * @param repo logger repository
-     */
-    public SocketReceiver(final int p, final LoggerRepository repo) {
-        super();
-        this.port = p;
-        repository = repo;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int getPort() {
-        return port;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setPort(final int p) {
-        port = p;
-    }
-
-    /**
-     * Returns true if the receiver is the same class and they are
-     * configured for the same properties, and super class also considers
-     * them to be equivalent. This is used by PluginRegistry when determining
-     * if the a similarly configured receiver is being started.
-     *
-     * @param testPlugin The plugin to test equivalency against.
-     * @return boolean True if the testPlugin is equivalent to this plugin.
-     */
-    public boolean isEquivalent(final Plugin testPlugin) {
-        if ((testPlugin != null) && testPlugin instanceof SocketReceiver) {
-            SocketReceiver sReceiver = (SocketReceiver) testPlugin;
-
-            return (port == sReceiver.getPort() && super.isEquivalent(testPlugin));
-        }
-
-        return false;
-    }
-
-    /**
-     * Starts the SocketReceiver with the current options.
-     */
-    public void activateOptions() {
-        if (!isActive()) {
-            //      shutdown();
-            rThread = new Thread(this);
-            rThread.setDaemon(true);
-            rThread.start();
-            if (advertiseViaMulticastDNS) {
-                zeroConf = new ZeroConfSupport(ZONE, port, getName());
-                zeroConf.advertise();
-            }
-
-            active = true;
-        }
-    }
-
-    /**
-     * Called when the receiver should be stopped. Closes the
-     * server socket and all of the open sockets.
-     */
-    public synchronized void shutdown() {
-        getLogger().debug(getName() + " received shutdown request");
-
-        // mark this as no longer running
-        active = false;
-
-        if (rThread != null) {
-            rThread.interrupt();
-            rThread = null;
-        }
-        if (advertiseViaMulticastDNS) {
-            zeroConf.unadvertise();
-        }
-
-        doShutdown();
-    }
-
-    /**
-     * Does the actual shutting down by closing the server socket
-     * and any connected sockets that have been created.
-     */
-    private synchronized void doShutdown() {
-        active = false;
-
-        getLogger().debug(getName() + " doShutdown called");
-
-        // close the server socket
-        closeServerSocket();
-
-        // close all of the accepted sockets
-        closeAllAcceptedSockets();
-    }
-
-    /**
-     * Closes the server socket, if created.
-     */
-    private void closeServerSocket() {
-        getLogger().debug("{} closing server socket", getName());
-
-        try {
-            if (serverSocket != null) {
-                serverSocket.close();
-            }
-        } catch (Exception e) {
-            // ignore for now
-        }
-
-        serverSocket = null;
-    }
-
-    /**
-     * Closes all the connected sockets in the List.
-     */
-    private synchronized void closeAllAcceptedSockets() {
-        for (Object aSocketList : socketList) {
-            try {
-                ((Socket) aSocketList).close();
-            } catch (Exception e) {
-                // ignore for now
-            }
-        }
-
-        // clear member variables
-        socketMap.clear();
-        socketList.clear();
-    }
-
-    /**
-     * Sets the flag to indicate if receiver is active or not.
-     *
-     * @param b new value
-     */
-    protected synchronized void setActive(final boolean b) {
-        active = b;
-    }
-
-    public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
-        this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
-    }
-
-    public boolean isAdvertiseViaMulticastDNS() {
-        return advertiseViaMulticastDNS;
-    }
-
-    /**
-     * Loop, accepting new socket connections.
-     */
-    public void run() {
-        /**
-         * Ensure we start fresh.
-         */
-        closeServerSocket();
-        closeAllAcceptedSockets();
-
-        // start the server socket
-        try {
-            serverSocket = new ServerSocket(port);
-        } catch (Exception e) {
-            getLogger().error(
-                "error starting SocketReceiver (" + this.getName()
-                    + "), receiver did not start", e);
-            active = false;
-
-            return;
-        }
-
-        Socket socket = null;
-
-        try {
-            getLogger().debug("in run-about to enter while not interrupted loop");
-
-            active = true;
-
-            while (!rThread.isInterrupted()) {
-                // if we have a socket, start watching it
-                if (socket != null) {
-                    getLogger().debug(
-                        "socket not null - creating and starting socketnode");
-                    socketList.add(socket);
-
-                    SocketNode13 node = new SocketNode13(socket, this);
-                    synchronized (listenerList) {
-                        for (Object aListenerList : listenerList) {
-                            SocketNodeEventListener l =
-                                (SocketNodeEventListener) aListenerList;
-                            node.addSocketNodeEventListener(l);
-                        }
-                    }
-                    socketMap.put(socket, node);
-                    new Thread(node).start();
-                    socket = null;
-                }
-
-                getLogger().debug("waiting to accept socket");
-
-                // wait for a socket to open, then loop to start it
-                socket = serverSocket.accept();
-                getLogger().debug("accepted socket");
-            }
-        } catch (Exception e) {
-            getLogger().warn(
-                "exception while watching socket server in SocketReceiver ("
-                    + this.getName() + "), stopping");
-        }
-
-        getLogger().debug("{} has exited the not interrupted loop", getName());
-
-        // socket not watched because we a no longer running
-        // so close it now.
-        if (socket != null) {
-            try {
-                socket.close();
-            } catch (IOException e1) {
-                getLogger().warn("socket exception caught - socket closed");
-            }
-        }
-
-        getLogger().debug("{} is exiting main run loop", getName());
-    }
-
-    /**
-     * Returns a Vector of SocketDetail representing the IP/Domain name
-     * of the currently connected sockets that this receiver has
-     * been responsible for creating.
-     *
-     * @return Vector of SocketDetails
-     */
-    public Vector<SocketDetail> getConnectedSocketDetails() {
-        Vector<SocketDetail> details = new Vector<>(socketList.size());
-
-        for (Enumeration<Socket> enumeration = socketList.elements();
-             enumeration.hasMoreElements();
-            ) {
-            Socket socket = enumeration.nextElement();
-            details.add(
-                new SocketDetail(socket, socketMap.get(socket)));
-        }
-
-        return details;
-    }
-
-    /**
-     * Returns the currently configured SocketNodeEventListener that
-     * will be automatically set for each SocketNode created.
-     *
-     * @return SocketNodeEventListener currently configured
-     * @deprecated This receiver now supports multiple listeners
-     */
-    public SocketNodeEventListener getListener() {
-        return listener;
-    }
-
-    /**
-     * Adds the listener to the list of listeners to be notified of the
-     * respective event.
-     *
-     * @param l the listener to add to the list
-     */
-    public void addSocketNodeEventListener(
-        final SocketNodeEventListener l) {
-        listenerList.add(l);
-    }
-
-    /**
-     * Removes the registered Listener from this instances list of
-     * listeners.  If the listener has not been registered, then invoking
-     * this method has no effect.
-     *
-     * @param l the SocketNodeEventListener to remove
-     */
-    public void removeSocketNodeEventListener(
-        final SocketNodeEventListener l) {
-        listenerList.remove(l);
-    }
-
-    /**
-     * Sets the SocketNodeEventListener that will be used for each
-     * created SocketNode.
-     *
-     * @param l the listener to set on each creation of a SocketNode
-     * @deprecated This receiver now supports multiple listeners and
-     * so this method simply removes the listener (if there already)
-     * and readds it to the list.
-     * <p>
-     * The passed listener will also be returned via the getListener()
-     * method still, but this is also deprecated
-     */
-    public void setListener(final SocketNodeEventListener l) {
-        removeSocketNodeEventListener(l);
-        addSocketNodeEventListener(l);
-        this.listener = l;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isPaused() {
-        return paused;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setPaused(final boolean b) {
-        paused = b;
-    }
-
-    /**
-     * Socket detail.
-     */
-    private static final class SocketDetail implements AddressBased, PortBased,
-        Pauseable {
-        /**
-         * Address.
-         */
-        private String address;
-        /**
-         * Port.
-         */
-        private int port;
-        /**
-         * Socket node.
-         */
-        private SocketNode13 socketNode;
-
-        /**
-         * Create new instance.
-         *
-         * @param socket socket
-         * @param node   socket node
-         */
-        private SocketDetail(final Socket socket,
-                             final SocketNode13 node) {
-            super();
-            this.address = socket.getInetAddress().getHostName();
-            this.port = socket.getPort();
-            this.socketNode = node;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public String getAddress() {
-            return address;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public int getPort() {
-            return port;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public String getName() {
-            return "Socket";
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public boolean isActive() {
-            return true;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public boolean isPaused() {
-            return socketNode.isPaused();
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public void setPaused(final boolean b) {
-            socketNode.setPaused(b);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void doPost(final LoggingEvent event) {
-        if (!isPaused()) {
-            super.doPost(event);
-        }
-    }
-
-}
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
index 56f45f5..eadea44 100644
--- a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
@@ -152,7 +152,7 @@
     }
 
     /**
-     * Starts the SocketReceiver with the current options.
+     * Starts the XMLSocketReceiver with the current options.
      */
     public void activateOptions() {
         if (!isActive()) {
@@ -263,7 +263,7 @@
             serverSocket = new ServerSocket(port);
         } catch (Exception e) {
             getLogger().error(
-                "error starting SocketReceiver (" + this.getName()
+                "error starting XMLSocketReceiver (" + this.getName()
                     + "), receiver did not start", e);
             active = false;
             doShutdown();
diff --git a/src/main/java/org/apache/log4j/plugins/Receiver.java b/src/main/java/org/apache/log4j/plugins/Receiver.java
index 628e25f..2765f42 100644
--- a/src/main/java/org/apache/log4j/plugins/Receiver.java
+++ b/src/main/java/org/apache/log4j/plugins/Receiver.java
@@ -31,15 +31,7 @@
  * logging events inside the log4j environment.
  * <p></p>
  * <p>Receivers are meant to support the receiving of
- * remote logging events from another process. For example,
- * SocketAppender "appends" a logging event to a socket, configured
- * for a specific host and port number.  On the receiving side of
- * the socket can be a SocketReceiver object.  The SocketReceiver
- * object receives the logging event, and then "posts" it to the
- * log4j environment (LoggerRepository) on the receiving machine, to
- * be handled by the configured appenders, etc.  The various
- * settings in this environment (Logger levels, Appender filters &amp;
- * thresholds) are applied to the received logging event.
+ * remote logging events from another process.
  * <p></p>
  * <p>Receivers can also be used to "import" log messages from other
  * logging packages into the log4j environment.
diff --git a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html b/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html
deleted file mode 100644
index 2f7c658..0000000
--- a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketHubReceiver.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<Head><link rel="stylesheet" href="stylesheet.css" type="text/css"></head>
-<body>
-<B>Socket Hub Receiver</b>
-<p>SocketHubReceiver compliments the SocketHubAppender. </p>
-
-<p>TODO</p>
-<p>Click here to see more information about SocketHubReceiver.</p>
-
-<p>Click <a href="http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/net/SocketHubAppender.html">here</a> to see more information about SocketHubAppender.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html b/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html
deleted file mode 100644
index 264a003..0000000
--- a/src/main/resources/org/apache/log4j/chainsaw/Details_SocketReceiver.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<Head><link rel="stylesheet" href="stylesheet.css" type="text/css"></head>
-<body>
-<B>Socket Receiver</b>
-<p>SocketReceiver compliments the SocketAppender. </p>
-
-<p>SocketReceiver listens
-on a specified port, accepting connections from remote sockets
-, de-serializes logging events received from these sockets,
-and posts them into Chainsaw's local Log4j environment allowing you 
-to view them.</p>
-<p>Click here to see more information about SocketReceiver.</p>
-
-<p>Click <a href="http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/net/SocketAppender.html">here</a> to see more information about SocketAppender.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html b/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
index b25f6cd..9262de8 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
+++ b/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
@@ -215,8 +215,6 @@
     <ul>UDPAppender</ul>
     <ul>MulticastAppender</ul>
 Supported receivers:
-    <ul>SocketReceiver</ul>
-    <ul>SocketHubReceiver (also receives events from ZeroConfSocketHubAppender)</ul>
     <ul>XMLSocketReceiver (can receive events sent over TCP by other logging frameworks)</ul>
     <ul>UDPReceiver</ul>
     <ul>MulticastReceiver</ul>
diff --git a/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers b/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
index f05c820..bc13efb 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
+++ b/src/main/resources/org/apache/log4j/chainsaw/receivers/known.receivers
@@ -17,8 +17,6 @@
 # tests/src/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java test case
 
 org.apache.log4j.net.MulticastReceiver
-org.apache.log4j.net.SocketHubReceiver
-org.apache.log4j.net.SocketReceiver
 org.apache.log4j.net.UDPReceiver
 org.apache.log4j.net.XMLSocketReceiver
 org.apache.log4j.net.JMSReceiver
diff --git a/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java b/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
index 01a718e..82dc7e6 100644
--- a/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
+++ b/src/test/java/org/apache/log4j/chainsaw/receivers/ReceiversHelperTest.java
@@ -22,12 +22,7 @@
 
 import org.apache.log4j.chainsaw.receivers.ReceiversHelper;
 import org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver;
-import org.apache.log4j.net.JMSReceiver;
-import org.apache.log4j.net.MulticastReceiver;
-import org.apache.log4j.net.SocketHubReceiver;
-import org.apache.log4j.net.SocketReceiver;
-import org.apache.log4j.net.UDPReceiver;
-import org.apache.log4j.net.XMLSocketReceiver;
+import org.apache.log4j.net.*;
 import org.apache.log4j.db.DBReceiver;
 import org.apache.log4j.varia.LogFilePatternReceiver;
 
@@ -52,9 +47,7 @@
         Class[] expectedList =
             new Class[] {
                 MulticastReceiver.class, 
-                SocketHubReceiver.class, 
-                SocketReceiver.class,
-                UDPReceiver.class, 
+                UDPReceiver.class,
                 XMLSocketReceiver.class,
                 LogFilePatternReceiver.class,
                 JMSReceiver.class,