    001    package com.skype.ipc;
    002
    003    import java.io.BufferedOutputStream;
    004    import java.io.FileOutputStream;
    005    import java.io.IOException;
    006    import java.io.OutputStream;
    007
    008    public class LoggedBufferedOutputStream extends BufferedOutputStream implements OutputTransporting {
    009
    010        public LoggedBufferedOutputStream(OutputStream out, ClientConfiguration cfg) {
    011            super(out);
    012            if (cfg.generateTransportLog()) {
    013                try {
    014                    mTransportLog = new FileOutputStream(cfg.getOutputTransportLogName());
    015                } catch (IOException e) {
    016                    mTransportLog = null;
    017                }
    018            }
    019        }
    020
    021        public void writeBytes(byte [] src) throws IOException {
    022            super.write(src, 0, src.length);
    023            if (mTransportLog != null) {
    024                try {
    025                    mTransportLog.write(src, 0, src.length);
    026                } catch (IOException e) {
    027                    mTransportLog = null;
    028                }
    029            }
    030        }
    031
    032        public void writeBytesAndFlush(byte [] src) throws IOException {
    033            super.write(src, 0, src.length);
    034            super.flush();
    035            if (mTransportLog != null) {
    036                try {
    037                    mTransportLog.write(src, 0, src.length);
    038                } catch (IOException e) {
    039                    mTransportLog = null;
    040                }
    041            }
    042        }
    043
    044        public void writeByte(int value) throws IOException {
    045            super.write(value);
    046            if (mTransportLog != null) {
    047                try {
    048                    mTransportLog.write(value);
    049                } catch (IOException e) {
    050                    mTransportLog = null;
    051                }
    052            }
    053        }
    054
    055        public void writeByteAndFlush(int value) throws IOException {
    056            super.write(value);
    057            super.flush();
    058            if (mTransportLog != null) {
    059                try {
    060                    mTransportLog.write(value);
    061                } catch (IOException e) {
    062                    mTransportLog = null;
    063                }
    064            }
    065        }
    066
    067        public void close() throws IOException {
    068            try {
    069                if (mTransportLog != null)
    070                     mTransportLog.close();
    071            } catch (IOException e) {
    072            }
    073            super.close();
    074        }
    075
    076        private FileOutputStream mTransportLog;
    077    }
    078