// Path: src/main/java/org/apache/log4j/component/plugins/Receiver.java
// public abstract class Receiver extends PluginSkeleton implements Thresholdable {
//     /**
//      * Threshold level.
//      */
//     protected Level thresholdLevel;
// 
//     /**
//      * Create new instance.
//      */
//     protected Receiver() {
//         super();
//     }
// 
//     /**
//      * Sets the receiver theshold to the given level.
//      *
//      * @param level The threshold level events must equal or be greater
//      *              than before further processing can be done.
//      */
//     public void setThreshold(final Level level) {
//         Level oldValue = this.thresholdLevel;
//         thresholdLevel = level;
//         firePropertyChange("threshold", oldValue, this.thresholdLevel);
//     }
// 
//     /**
//      * Gets the current threshold setting of the receiver.
//      *
//      * @return Level The current threshold level of the receiver.
//      */
//     public Level getThreshold() {
//         return thresholdLevel;
//     }
// 
//     /**
//      * Returns true if the given level is equals or greater than the current
//      * threshold value of the receiver.
//      *
//      * @param level The level to test against the receiver threshold.
//      * @return boolean True if level is equal or greater than the
//      *         receiver threshold.
//      */
//     public boolean isAsSevereAsThreshold(final Level level) {
//         return ((thresholdLevel == null)
//                 || level.isGreaterOrEqual(thresholdLevel));
//     }
// 
//     /**
//      * Posts the logging event to a logger in the configured logger
//      * repository.
//      *
//      * @param event the log event to post to the local log4j environment.
//      */
//     public void doPost(final LoggingEvent event) {
//         // if event does not meet threshold, exit now
//         if (!isAsSevereAsThreshold(event.getLevel())) {
//             return;
//         }
// 
//         // get the "local" logger for this event from the
//         // configured repository.
//         Logger localLogger =
//                 getLoggerRepository().getLogger(event.getLoggerName());
// 
//         // if the logger level is greater or equal to the level
//         // of the event, use the logger to append the event.
//         if (event.getLevel()
//                 .isGreaterOrEqual(localLogger.getEffectiveLevel())) {
//             // call the loggers appenders to process the event
//             localLogger.callAppenders(event);
//         }
//   }
// }
// 
// Path: src/main/java/org/apache/log4j/receivers/spi/Decoder.java
// public interface Decoder {
//     /**
//      * Decode events from document.
//      * @param document document to decode.
//      * @return list of LoggingEvent instances.
//      */
//   Vector decodeEvents(String document);
// 
//     /**
//      * Decode event from string.
//      * @param event string representation of event
//      * @return event
//      */
//   LoggingEvent decode(String event);
// 
//     /**
//      * Decode event from document retrieved from URL.
//      * @param url url of document
//      * @return list of LoggingEvent instances.
//      * @throws IOException if IO error resolving document.
//      */
//   Vector decode(URL url) throws IOException;
// 
//     /**
//      * Sets additional properties.
//      * @param additionalProperties map of additional properties.
//      */
//   void setAdditionalProperties(Map additionalProperties);
// }


import org.apache.log4j.component.plugins.Pauseable;
import org.apache.log4j.component.plugins.Receiver;
import org.apache.log4j.net.ZeroConfSupport;
import org.apache.log4j.receivers.spi.Decoder;
import org.apache.log4j.spi.LoggingEvent;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
 * 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.receivers.net;





/**
 *  Multicast-based receiver.  Accepts LoggingEvents encoded using
 *  MulticastAppender and XMLLayout. The the XML data is converted
 *  back to a LoggingEvent and is posted.
 *
 *  @author Scott Deboy <sdeboy@apache.org>
 *
 */
public class MulticastReceiver extends Receiver implements PortBased,
  AddressBased, Pauseable {
  private static final int PACKET_LENGTH = 16384;
  private int port;
  private String address;
  private String encoding;
  private MulticastSocket socket = null;

  //default to log4j xml decoder
  private String decoder = "org.apache.log4j.xml.XMLDecoder";
// Path: src/main/java/org/apache/log4j/component/plugins/Receiver.java
// public abstract class Receiver extends PluginSkeleton implements Thresholdable {
//     /**
//      * Threshold level.
//      */
//     protected Level thresholdLevel;
// 
//     /**
//      * Create new instance.
//      */
//     protected Receiver() {
//         super();
//     }
// 
//     /**
//      * Sets the receiver theshold to the given level.
//      *
//      * @param level The threshold level events must equal or be greater
//      *              than before further processing can be done.
//      */
//     public void setThreshold(final Level level) {
//         Level oldValue = this.thresholdLevel;
//         thresholdLevel = level;
//         firePropertyChange("threshold", oldValue, this.thresholdLevel);
//     }
// 
//     /**
//      * Gets the current threshold setting of the receiver.
//      *
//      * @return Level The current threshold level of the receiver.
//      */
//     public Level getThreshold() {
//         return thresholdLevel;
//     }
// 
//     /**
//      * Returns true if the given level is equals or greater than the current
//      * threshold value of the receiver.
//      *
//      * @param level The level to test against the receiver threshold.
//      * @return boolean True if level is equal or greater than the
//      *         receiver threshold.
//      */
//     public boolean isAsSevereAsThreshold(final Level level) {
//         return ((thresholdLevel == null)
//                 || level.isGreaterOrEqual(thresholdLevel));
//     }
// 
//     /**
//      * Posts the logging event to a logger in the configured logger
//      * repository.
//      *
//      * @param event the log event to post to the local log4j environment.
//      */
//     public void doPost(final LoggingEvent event) {
//         // if event does not meet threshold, exit now
//         if (!isAsSevereAsThreshold(event.getLevel())) {
//             return;
//         }
// 
//         // get the "local" logger for this event from the
//         // configured repository.
//         Logger localLogger =
//                 getLoggerRepository().getLogger(event.getLoggerName());
// 
//         // if the logger level is greater or equal to the level
//         // of the event, use the logger to append the event.
//         if (event.getLevel()
//                 .isGreaterOrEqual(localLogger.getEffectiveLevel())) {
//             // call the loggers appenders to process the event
//             localLogger.callAppenders(event);
//         }
//   }
// }
// 
// Path: src/main/java/org/apache/log4j/receivers/spi/Decoder.java
// public interface Decoder {
//     /**
//      * Decode events from document.
//      * @param document document to decode.
//      * @return list of LoggingEvent instances.
//      */
//   Vector decodeEvents(String document);
// 
//     /**
//      * Decode event from string.
//      * @param event string representation of event
//      * @return event
//      */
//   LoggingEvent decode(String event);
// 
//     /**
//      * Decode event from document retrieved from URL.
//      * @param url url of document
//      * @return list of LoggingEvent instances.
//      * @throws IOException if IO error resolving document.
//      */
//   Vector decode(URL url) throws IOException;
// 
//     /**
//      * Sets additional properties.
//      * @param additionalProperties map of additional properties.
//      */
//   void setAdditionalProperties(Map additionalProperties);
// }


// Path: src/main/java/org/apache/log4j/receivers/net/MulticastReceiver.java
import org.apache.log4j.component.plugins.Pauseable;
import org.apache.log4j.component.plugins.Receiver;
import org.apache.log4j.net.ZeroConfSupport;
import org.apache.log4j.receivers.spi.Decoder;
import org.apache.log4j.spi.LoggingEvent;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/*
 * 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.receivers.net;





/**
 *  Multicast-based receiver.  Accepts LoggingEvents encoded using
 *  MulticastAppender and XMLLayout. The the XML data is converted
 *  back to a LoggingEvent and is posted.
 *
 *  @author Scott Deboy <sdeboy@apache.org>
 *
 */
public class MulticastReceiver extends Receiver implements PortBased,
  AddressBased, Pauseable {
  private static final int PACKET_LENGTH = 16384;
  private int port;
  private String address;
  private String encoding;
  private MulticastSocket socket = null;

  //default to log4j xml decoder
  private String decoder = "org.apache.log4j.xml.XMLDecoder";
  private Decoder decoderImpl;