----- Original Message ----- From: "Darrell DeBoer" <[EMAIL PROTECTED]> > I'm thinking of a SocketManager/ConnectionManager implementation that returns > a logging socket, so that the logging code doesn't need to be in the actual > protocol server at all.
This may help Ability to log input or output stream data. -------------------- public static InputStream createSnoopStream(final InputStream inp, final OutputStream snoop) { return new FilterInputStream(inp) { public int read() throws IOException { int d = super.read(); if ( d != -1 ) snoop.write(d); return d; } public int read(byte[] ba,int offset,int count) throws IOException { count = super.read(ba,offset,count); if ( count != -1 ) snoop.write(ba,offset,count); return count; } public void close() throws IOException { super.close(); snoop.close(); } }; } public static OutputStream createSnoopStream(final OutputStream out, final OutputStream snoop) { return new FilterOutputStream(out) { public void write(int b) throws IOException { super.write(b); snoop.write(b); } public void flush() throws IOException { super.flush(); snoop.flush(); } public void close() throws IOException { super.close(); snoop.close(); } }; } -------------------- JDK 1.3 code to create a create a logging socket --------------------- public static Socket createSnoopSocket (Socket sock,final OutputStream inpSnoop,final OutputStream outSnoop) throws SocketException { SocketImpl impl = getImpl(sock); return new Socket(impl) { public InputStream getInputStream() throws IOException { return createSnoopStream(super.getInputStream(),inpSnoop); } public OutputStream getOutputStream() throws IOException { return createSnoopStream(super.getOutputStream(),outSnoop); } }; } // this breaks with JDK 1.4 public static SocketImpl getImpl(Socket sock) { SocketImpl impl = null; try { Field f = (Socket.class).getDeclaredField("impl"); f.setAccessible(true); impl = (SocketImpl)f.get(sock); } catch( Exception ex ) { throw new RuntimeException(ex.toString()); } return impl; } --------------------------- I use this with a customized and very old version SocketManager/ConnectionManager. Another tack to record traffic that I thought was even more elegant was to have a Socks server that records traffic or a NAT like socket dispatcher. Most clients can be configured to have a Socks server. One advantage is that not only can you get mail trace, but also other protocols like IM traffic. :-) Another advantage is that the logging is handled by a separate process. Harmeet -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>