View Javadoc

    1   /*
    2    * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/Wire.java,v 1.9 2004/06/24 21:39:52 mbecke Exp $
    3    * $Revision: 480424 $
    4    * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
    5    *
    6    * ====================================================================
    7    *
    8    *  Licensed to the Apache Software Foundation (ASF) under one or more
    9    *  contributor license agreements.  See the NOTICE file distributed with
    10   *  this work for additional information regarding copyright ownership.
    11   *  The ASF licenses this file to You under the Apache License, Version 2.0
    12   *  (the "License"); you may not use this file except in compliance with
    13   *  the License.  You may obtain a copy of the License at
    14   *
    15   *      http://www.apache.org/licenses/LICENSE-2.0
    16   *
    17   *  Unless required by applicable law or agreed to in writing, software
    18   *  distributed under the License is distributed on an "AS IS" BASIS,
    19   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    20   *  See the License for the specific language governing permissions and
    21   *  limitations under the License.
    22   * ====================================================================
    23   *
    24   * This software consists of voluntary contributions made by many
    25   * individuals on behalf of the Apache Software Foundation.  For more
    26   * information on the Apache Software Foundation, please see
    27   * <http://www.apache.org/>.
    28   *
    29   */
    30
    31  package org.apache.commons.httpclient;
    32
    33  import java.io.IOException;
    34  import java.io.InputStream;
    35  import java.io.ByteArrayInputStream;
    36  import org.apache.commons.logging.Log;
    37  import org.apache.commons.logging.LogFactory;
    38
    39  /**
    40   * Logs data to the wire LOG.
    41   *
    42   * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
    43   *
    44   * @since 2.0beta1
    45   */
    46  class Wire {
    47
    48      public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
    49
    50      public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));
    51
    52      /** Log for any wire messages. */
    53      private Log log;
    54
    55      private Wire(Log log) {
    56          this.log = log;
    57      }
    58
    59      private void wire(String header, InputStream instream)
    60        throws IOException {
    61          StringBuffer buffer = new StringBuffer();
    62          int ch;
    63          while ((ch = instream.read()) != -1) {
    64              if (ch == 13) {
    65                  buffer.append("[\\r]");
    66              } else if (ch == 10) {
    67                      buffer.append("[\\n]\"");
    68                      buffer.insert(0, "\"");
    69                      buffer.insert(0, header);
    70                      log.debug(buffer.toString());
    71                      buffer.setLength(0);
    72              } else if ((ch < 32) || (ch > 127)) {
    73                  buffer.append("[0x");
    74                  buffer.append(Integer.toHexString(ch));
    75                  buffer.append("]");
    76              } else {
    77                  buffer.append((char) ch);
    78              }
    79          }
    80          if (buffer.length() > 0) {
    81              buffer.append("\"");
    82              buffer.insert(0, "\"");
    83              buffer.insert(0, header);
    84              log.debug(buffer.toString());
    85          }
    86      }
    87
    88
    89      public boolean enabled() {
    90          return log.isDebugEnabled();
    91      }
    92
    93      public void output(InputStream outstream)
    94        throws IOException {
    95          if (outstream == null) {
    96              throw new IllegalArgumentException("Output may not be null");
    97          }
    98          wire(">> ", outstream);
    99      }
    100
    101     public void input(InputStream instream)
    102       throws IOException {
    103         if (instream == null) {
    104             throw new IllegalArgumentException("Input may not be null");
    105         }
    106         wire("<< ", instream);
    107     }
    108
    109     public void output(byte[] b, int off, int len)
    110       throws IOException {
    111         if (b == null) {
    112             throw new IllegalArgumentException("Output may not be null");
    113         }
    114         wire(">> ", new ByteArrayInputStream(b, off, len));
    115     }
    116
    117     public void input(byte[] b, int off, int len)
    118       throws IOException {
    119         if (b == null) {
    120             throw new IllegalArgumentException("Input may not be null");
    121         }
    122         wire("<< ", new ByteArrayInputStream(b, off, len));
    123     }
    124
    125     public void output(byte[] b)
    126       throws IOException {
    127         if (b == null) {
    128             throw new IllegalArgumentException("Output may not be null");
    129         }
    130         wire(">> ", new ByteArrayInputStream(b));
    131     }
    132
    133     public void input(byte[] b)
    134       throws IOException {
    135         if (b == null) {
    136             throw new IllegalArgumentException("Input may not be null");
    137         }
    138         wire("<< ", new ByteArrayInputStream(b));
    139     }
    140
    141     public void output(int b)
    142       throws IOException {
    143         output(new byte[] {(byte) b});
    144     }
    145
    146     public void input(int b)
    147       throws IOException {
    148         input(new byte[] {(byte) b});
    149     }
    150
    151     public void output(final String s)
    152       throws IOException {
    153         if (s == null) {
    154             throw new IllegalArgumentException("Output may not be null");
    155         }
    156         output(s.getBytes());
    157     }
    158
    159     public void input(final String s)
    160       throws IOException {
    161         if (s == null) {
    162             throw new IllegalArgumentException("Input may not be null");
    163         }
    164         input(s.getBytes());
    165     }
    166 }