carnold     2005/02/24 14:56:21

  Modified:    contribs/Jamie JMSQueueAppender.java
               contribs/JayFunnell NetSendAppender.java
               src/java/org/apache/log4j AppenderSkeleton.java
                        AsyncAppender.java WriterAppender.java
               src/java/org/apache/log4j/db DBAppender.java
               src/java/org/apache/log4j/multiplex MultiplexAppender.java
               src/java/org/apache/log4j/net JMSAppender.java
                        MulticastAppender.java SMTPAppender.java
                        SocketAppender.java SocketHubAppender.java
                        SyslogAppender.java TelnetAppender.java
                        UDPAppender.java
               src/java/org/apache/log4j/varia ListAppender.java
                        ListModelAppender.java NullAppender.java
               tests/integration/src/java TestAppender.java
               tests/src/java/org/apache/log4j AbstractAppenderTest.java
                        ConsoleAppenderTest.java FileAppenderTest.java
                        VectorAppender.java WriterAppenderTest.java
               tests/src/java/org/apache/log4j/performance
                        NullAppender.java
  Log:
  Restore isActive check, tests, added AppenderSkeleton constructors
  
  Revision  Changes    Path
  1.2       +1 -0      logging-log4j/contribs/Jamie
  
  Index: JMSQueueAppender.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/contribs/Jamie Tsao/JMSQueueAppender.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JMSQueueAppender.java     20 Jun 2001 21:03:42 -0000      1.1
  +++ JMSQueueAppender.java     24 Feb 2005 22:56:20 -0000      1.2
  @@ -33,6 +33,7 @@
       
       public 
        JMSQueueAppender() {
  +         super(false);
       }
   
     
  
  
  
  1.3       +1 -0      logging-log4j/contribs/JayFunnell/NetSendAppender.java
  
  Index: NetSendAppender.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/contribs/JayFunnell/NetSendAppender.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NetSendAppender.java      20 Mar 2003 04:37:06 -0000      1.2
  +++ NetSendAppender.java      24 Feb 2005 22:56:20 -0000      1.3
  @@ -86,6 +86,7 @@
   
     /** Default constructor */
     public NetSendAppender() {
  +    super(false);
       if (!libraryLoaded) {
         try {
           System.loadLibrary("NetSendAppender");
  
  
  
  1.38      +28 -10    
logging-log4j/src/java/org/apache/log4j/AppenderSkeleton.java
  
  Index: AppenderSkeleton.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/AppenderSkeleton.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- AppenderSkeleton.java     24 Feb 2005 00:59:15 -0000      1.37
  +++ AppenderSkeleton.java     24 Feb 2005 22:56:20 -0000      1.38
  @@ -70,10 +70,10 @@
     protected boolean closed = false;
   
     /**
  -   * By default, an appender is not in working order. It must be configured
  -   * first.
  +   * Is the appender properly configured and ready to process
  +   * events.
      */
  -  protected boolean active = false;
  +  protected boolean active = true;
   
     /**
      * The guard prevents an appender from repeatedly calling its own doAppend
  @@ -81,6 +81,26 @@
      */
     private boolean guard = false;
   
  +
  +  /**
  +   *  Constructs an AppenderSkeleton.
  +   *  @remarks This constructor marks that the appender is ready for use
  +   *   when construction is complete.  If not, call super(false).
  +   */
  +  protected AppenderSkeleton() {
  +     active = true;
  +  }
  +  
  +  /**
  +   *  Constructs an AppenderSkeleton.
  +   *  @param isActive true if the appender is ready to process events
  +   *    when fully constructed.
  +   */
  +  protected AppenderSkeleton(final boolean isActive) {
  +     active = isActive;
  +  }
  +
  +
     /**
      * Calls the [EMAIL PROTECTED] #activate} method.
      *
  @@ -230,13 +250,11 @@
           return;
         }
   
  -//   This breaks appenders written prior to 18 Feb 2005
  -//
  -//      if (!this.active) {
  -//        getNonFloodingLogger().error(
  -//            "Attempted to log with inactive appender named [{}].", name);
  -//        return;
  -//      }
  +      if (!this.active) {
  +        getNonFloodingLogger().error(
  +            "Attempted to log with inactive appender named [{}].", name);
  +        return;
  +      }
   
         if (!isAsSevereAsThreshold(event.getLevel())) {
           return;
  
  
  
  1.45      +1 -1      
logging-log4j/src/java/org/apache/log4j/AsyncAppender.java
  
  Index: AsyncAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/AsyncAppender.java,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- AsyncAppender.java        18 Feb 2005 17:23:44 -0000      1.44
  +++ AsyncAppender.java        24 Feb 2005 22:56:20 -0000      1.45
  @@ -68,10 +68,10 @@
     public AsyncAppender() {
       // Note: The dispatcher code assumes that the aai is set once and
       // for all.
  +    super(true);
       aai = new AppenderAttachableImpl();
       dispatcher = new Dispatcher(bf, this);
       dispatcher.start();
  -    super.activate();
     }
     
     public void addAppender(Appender newAppender) {
  
  
  
  1.32      +2 -0      
logging-log4j/src/java/org/apache/log4j/WriterAppender.java
  
  Index: WriterAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/WriterAppender.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- WriterAppender.java       18 Feb 2005 19:55:55 -0000      1.31
  +++ WriterAppender.java       24 Feb 2005 22:56:20 -0000      1.32
  @@ -67,6 +67,7 @@
      * The default constructor does nothing.  
      * */
     public WriterAppender() {
  +     super(false);
     }
   
     /**
  @@ -91,6 +92,7 @@
      * future log4j versions 
      * */
     public WriterAppender(Layout layout, Writer writer) {
  +    super(false);
       this.layout = layout;
       this.setWriter(writer);
       this.activate();
  
  
  
  1.19      +1 -0      
logging-log4j/src/java/org/apache/log4j/db/DBAppender.java
  
  Index: DBAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/db/DBAppender.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- DBAppender.java   18 Feb 2005 17:23:45 -0000      1.18
  +++ DBAppender.java   24 Feb 2005 22:56:21 -0000      1.19
  @@ -143,6 +143,7 @@
     boolean locationInfo = false;
   
     public DBAppender() {
  +     super(false);
     }
   
     public void activate() {
  
  
  
  1.3       +4 -0      
logging-log4j/src/java/org/apache/log4j/multiplex/MultiplexAppender.java
  
  Index: MultiplexAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/multiplex/MultiplexAppender.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MultiplexAppender.java    18 Feb 2005 17:23:44 -0000      1.2
  +++ MultiplexAppender.java    24 Feb 2005 22:56:21 -0000      1.3
  @@ -16,6 +16,10 @@
   
        private MultiplexSelector selector;
   
  +    public MultiplexAppender() {
  +       super(false);
  +    }
  +
        /*
         * (non-Javadoc)
         * 
  
  
  
  1.21      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/JMSAppender.java
  
  Index: JMSAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/JMSAppender.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- JMSAppender.java  18 Feb 2005 17:23:44 -0000      1.20
  +++ JMSAppender.java  24 Feb 2005 22:56:21 -0000      1.21
  @@ -120,6 +120,7 @@
     int successiveFailureCount = 0;
     
     public JMSAppender() {
  +      super(false);
     }
   
     /**
  
  
  
  1.12      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/MulticastAppender.java
  
  Index: MulticastAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/MulticastAppender.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- MulticastAppender.java    18 Feb 2005 17:23:44 -0000      1.11
  +++ MulticastAppender.java    24 Feb 2005 22:56:21 -0000      1.12
  @@ -71,6 +71,7 @@
     private String encoding;
     
     public MulticastAppender() {
  +     super(false);
     }
   
     /**
  
  
  
  1.48      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/SMTPAppender.java
  
  Index: SMTPAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/SMTPAppender.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- SMTPAppender.java 18 Feb 2005 20:46:58 -0000      1.47
  +++ SMTPAppender.java 24 Feb 2005 22:56:21 -0000      1.48
  @@ -100,6 +100,7 @@
        Use <code>evaluator</code> passed as parameter as the [EMAIL PROTECTED]
        TriggeringEventEvaluator} for this SMTPAppender.  */
     public SMTPAppender(TriggeringEventEvaluator evaluator) {
  +    super(false);
       this.evaluator = evaluator;
     }
   
  
  
  
  1.28      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/SocketAppender.java
  
  Index: SocketAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/SocketAppender.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- SocketAppender.java       18 Feb 2005 17:23:44 -0000      1.27
  +++ SocketAppender.java       24 Feb 2005 22:56:21 -0000      1.28
  @@ -123,6 +123,7 @@
     String application;
   
     public SocketAppender() {
  +      super(false);
     }
   
     /**
  
  
  
  1.15      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/SocketHubAppender.java
  
  Index: SocketHubAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/SocketHubAppender.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SocketHubAppender.java    22 Feb 2005 03:18:02 -0000      1.14
  +++ SocketHubAppender.java    24 Feb 2005 22:56:21 -0000      1.15
  @@ -118,6 +118,7 @@
     private CyclicBuffer buffer = null;
   
     public SocketHubAppender() {
  +     super(false);
     }
   
     /**
  
  
  
  1.21      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/SyslogAppender.java
  
  Index: SyslogAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/SyslogAppender.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- SyslogAppender.java       18 Feb 2005 17:23:44 -0000      1.20
  +++ SyslogAppender.java       24 Feb 2005 22:56:21 -0000      1.21
  @@ -70,6 +70,7 @@
     Layout layout;
     
     public SyslogAppender() {
  +      super(false);
     }
   
     /**
  
  
  
  1.15      +7 -0      
logging-log4j/src/java/org/apache/log4j/net/TelnetAppender.java
  
  Index: TelnetAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/TelnetAppender.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- TelnetAppender.java       18 Feb 2005 17:23:44 -0000      1.14
  +++ TelnetAppender.java       24 Feb 2005 22:56:21 -0000      1.15
  @@ -59,6 +59,13 @@
     private int port = 23;
   
     /**
  +   *  Creates a new TelnetAppender.
  +   */
  +  public TelnetAppender() {
  +     super(false);
  +  }
  +  
  +  /**
         This appender requires a layout to format the text to the
         attached client(s). */
     public boolean requiresLayout() {
  
  
  
  1.13      +1 -0      
logging-log4j/src/java/org/apache/log4j/net/UDPAppender.java
  
  Index: UDPAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/UDPAppender.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- UDPAppender.java  18 Feb 2005 17:23:44 -0000      1.12
  +++ UDPAppender.java  24 Feb 2005 22:56:21 -0000      1.13
  @@ -73,6 +73,7 @@
     boolean inError = false;
     
     public UDPAppender() {
  +     super(false);
     }
   
     /**
  
  
  
  1.8       +7 -0      
logging-log4j/src/java/org/apache/log4j/varia/ListAppender.java
  
  Index: ListAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/varia/ListAppender.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ListAppender.java 22 Nov 2004 20:20:59 -0000      1.7
  +++ ListAppender.java 24 Feb 2005 22:56:21 -0000      1.8
  @@ -40,6 +40,13 @@
     private List list = new ArrayList();
   
     /**
  +   *   Constructs a new ListAppender.
  +   */
  +  public ListAppender() {
  +     super(true);
  +  }
  +  
  +  /**
      * Returns a writeable, BUT cloned List of all the LoggingEvents that are 
contained
      * in the internal model.  You are free to modify this list without
     * worry of synchronization, but note that any modifications to the 
returned list
  
  
  
  1.4       +7 -0      
logging-log4j/src/java/org/apache/log4j/varia/ListModelAppender.java
  
  Index: ListModelAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/varia/ListModelAppender.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ListModelAppender.java    18 Feb 2005 17:23:43 -0000      1.3
  +++ ListModelAppender.java    24 Feb 2005 22:56:21 -0000      1.4
  @@ -32,6 +32,13 @@
    */
   public final class ListModelAppender extends AppenderSkeleton {
     private final DefaultListModel model = new DefaultListModel();
  +  
  +  /**
  +   *   Constructs a ListModelAppender.
  +   */
  +  public ListModelAppender() {
  +     super(true);
  +  }
   
     /**
      * Returns a reference to the ListModel that contains all the LoggingEvents
  
  
  
  1.7       +1 -0      
logging-log4j/src/java/org/apache/log4j/varia/NullAppender.java
  
  Index: NullAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/varia/NullAppender.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NullAppender.java 22 Feb 2005 03:18:35 -0000      1.6
  +++ NullAppender.java 24 Feb 2005 22:56:21 -0000      1.7
  @@ -21,6 +21,7 @@
     private static NullAppender instance = new NullAppender();
   
     public NullAppender() {
  +     super(true);
     }
   
     /**
  
  
  
  1.2       +3 -0      
logging-log4j/tests/integration/src/java/TestAppender.java
  
  Index: TestAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/integration/src/java/TestAppender.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestAppender.java 12 Jan 2005 12:06:23 -0000      1.1
  +++ TestAppender.java 24 Feb 2005 22:56:21 -0000      1.2
  @@ -4,6 +4,9 @@
   
   
   public class TestAppender extends AppenderSkeleton {
  +  public TestAppender() {
  +     super(false);
  +  }
   
     public void activateOptions() {
       getLogger().debug("Activate options called for appender named {}.", 
  
  
  
  1.5       +16 -12    
logging-log4j/tests/src/java/org/apache/log4j/AbstractAppenderTest.java
  
  Index: AbstractAppenderTest.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/AbstractAppenderTest.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractAppenderTest.java 22 Feb 2005 20:25:32 -0000      1.4
  +++ AbstractAppenderTest.java 24 Feb 2005 22:56:21 -0000      1.5
  @@ -34,32 +34,36 @@
    */
   abstract public class AbstractAppenderTest extends TestCase {
   
  -  abstract protected Appender getAppender();
  -  abstract protected Appender getConfiguredAppender();
  +  abstract protected AppenderSkeleton getAppender();
  +  abstract protected AppenderSkeleton getConfiguredAppender();
   
     public class DummyLayout extends Layout {
       public void format(Writer output, LoggingEvent event) {}
       public void activateOptions() {}
     }
   
  +  protected boolean isImmediatelyActive() {
  +      return false;
  +  }
  +
     public void testNewAppender() {
  -    // new appenders whould be inactive
  -    Appender appender = getAppender();
  -//    assertFalse(appender.isActive());
  -//    assertFalse(appender.isClosed());
  +    // most newly constructed appenders whould be inactive
  +    AppenderSkeleton appender = getAppender();
  +    assertEquals(isImmediatelyActive(), appender.isActive());
  +    assertFalse(appender.isClosed());
   
       appender.close();
  -//    assertTrue(appender.isClosed());
  +    assertTrue(appender.isClosed());
     }
   
     public void testConfiguredAppender() {
  -    Appender appender = getConfiguredAppender();
  -//    appender.activate();
  -//    assertTrue(appender.isActive());
  -//    assertFalse(appender.isClosed());
  +    AppenderSkeleton appender = getConfiguredAppender();
  +    appender.activate();
  +    assertTrue(appender.isActive());
  +    assertFalse(appender.isClosed());
   
       appender.close();
  -//    assertTrue(appender.isClosed());
  +    assertTrue(appender.isClosed());
     }
   
   
  
  
  
  1.3       +2 -2      
logging-log4j/tests/src/java/org/apache/log4j/ConsoleAppenderTest.java
  
  Index: ConsoleAppenderTest.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/ConsoleAppenderTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ConsoleAppenderTest.java  18 Feb 2005 20:46:58 -0000      1.2
  +++ ConsoleAppenderTest.java  24 Feb 2005 22:56:21 -0000      1.3
  @@ -25,11 +25,11 @@
    *
    */
   public class ConsoleAppenderTest extends AbstractAppenderTest {
  -  protected Appender getAppender() {
  +  protected AppenderSkeleton getAppender() {
       return new ConsoleAppender();
     }
   
  -  protected Appender getConfiguredAppender() {
  +  protected AppenderSkeleton getConfiguredAppender() {
       ConsoleAppender ca = new ConsoleAppender();
   
       // set a bogus layout
  
  
  
  1.3       +2 -2      
logging-log4j/tests/src/java/org/apache/log4j/FileAppenderTest.java
  
  Index: FileAppenderTest.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/FileAppenderTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FileAppenderTest.java     18 Feb 2005 20:46:58 -0000      1.2
  +++ FileAppenderTest.java     24 Feb 2005 22:56:21 -0000      1.3
  @@ -24,11 +24,11 @@
    * @author <a href="http://www.qos.ch/log4j/";>Ceki G&uuml;lc&uuml;</a>
    */
   public class FileAppenderTest extends AbstractAppenderTest {
  -  protected Appender getAppender() {
  +  protected AppenderSkeleton getAppender() {
       return new FileAppender();
     }
   
  -  protected Appender getConfiguredAppender() {
  +  protected AppenderSkeleton getConfiguredAppender() {
       FileAppender wa = new FileAppender();
       wa.setFile("output/temp");
       wa.setLayout(new DummyLayout());
  
  
  
  1.7       +1 -1      
logging-log4j/tests/src/java/org/apache/log4j/VectorAppender.java
  
  Index: VectorAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/VectorAppender.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- VectorAppender.java       18 Feb 2005 17:23:44 -0000      1.6
  +++ VectorAppender.java       24 Feb 2005 22:56:21 -0000      1.7
  @@ -29,8 +29,8 @@
     long delay = 0;
     
     public VectorAppender() {
  +    super(true);
       vector = new Vector();
  -    super.activate();
     }
   
     /**
  
  
  
  1.3       +2 -2      
logging-log4j/tests/src/java/org/apache/log4j/WriterAppenderTest.java
  
  Index: WriterAppenderTest.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/WriterAppenderTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WriterAppenderTest.java   18 Feb 2005 20:46:57 -0000      1.2
  +++ WriterAppenderTest.java   24 Feb 2005 22:56:21 -0000      1.3
  @@ -26,11 +26,11 @@
    * @author <a href="http://www.qos.ch/log4j/";>Ceki G&uuml;lc&uuml;</a>
    */
   public class WriterAppenderTest extends AbstractAppenderTest {
  -  protected Appender getAppender() {
  +  protected AppenderSkeleton getAppender() {
       return new WriterAppender();
     }
   
  -  protected Appender getConfiguredAppender() {
  +  protected AppenderSkeleton getConfiguredAppender() {
       WriterAppender wa = new WriterAppender();
   
       // set a bogus writer
  
  
  
  1.3       +1 -0      
logging-log4j/tests/src/java/org/apache/log4j/performance/NullAppender.java
  
  Index: NullAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/tests/src/java/org/apache/log4j/performance/NullAppender.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NullAppender.java 18 Feb 2005 17:23:43 -0000      1.2
  +++ NullAppender.java 24 Feb 2005 22:56:21 -0000      1.3
  @@ -35,6 +35,7 @@
     public String t;
   
     public NullAppender() {
  +     super(true);
     }
   
     public NullAppender(Layout layout) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to