You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/09/10 00:52:09 UTC

svn commit: r279903 - /directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java

Author: elecharny
Date: Fri Sep  9 15:52:04 2005
New Revision: 279903

URL: http://svn.apache.org/viewcvs?rev=279903&view=rev
Log:
Updated with Jocelyn modifications

Modified:
    directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java

Modified: directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java?rev=279903&r1=279902&r2=279903&view=diff
==============================================================================
--- directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java (original)
+++ directory/sandbox/trunk/proxy/src/java/main/org/apache/ldap/proxy/impl/ProxyConnection.java Fri Sep  9 15:52:04 2005
@@ -1,418 +1,415 @@
-/*
- *   Copyright 2005 The Apache Software Foundation
- *
- *   Licensed 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.ldap.proxy.impl;
-
-import java.io.BufferedOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.nio.ByteBuffer;
-
-import java.util.Date;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.apache.asn1.codec.DecoderException;
-import org.apache.asn1new.ber.Asn1Decoder;
-import org.apache.asn1new.ber.containers.IAsn1Container;
-import org.apache.asn1new.ldap.codec.LdapDecoder;
-import org.apache.asn1new.ldap.codec.LdapMessageContainer;
-import org.apache.asn1new.ldap.pojo.LdapMessage;
-import org.apache.asn1new.util.StringUtils;
-import org.apache.ldap.proxy.gui.MainFrame;
-
-/**
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- */
-class ProxyConnection extends Thread
-{
-
-    Socket                 fromClient;
-
-    String                 host;
-
-    int                    port;
-
-    long                   timeout;
-
-    MainFrame              mainFrame;
-
-    int                    lastMessageId = -1;
-
-    DefaultMutableTreeNode lastNode;
-
-    DefaultMutableTreeNode lastMessNode;
-
-    int                    currentCount  = 0;
-
-    ProxyConnection(Socket s, String host, int port, long timeout)
-    {
-        fromClient = s;
-        this.host = host;
-        this.port = port;
-        this.timeout = timeout;
-
-    }
-
-    private String decode( ByteBuffer buffer ) throws DecoderException
-    {
-        int position = buffer.position();
-
-        DefaultMutableTreeNode mess;
-
-        // DefaultMutableTreeNode messTrue;
-        DefaultMutableTreeNode messTrue;
-
-        Asn1Decoder ldapDecoder = new LdapDecoder();
-
-        // Allocate a LdapMessageContainer Container
-        IAsn1Container ldapMessageContainer = new LdapMessageContainer();
-
-        // Decode the PDU
-        ldapDecoder.decode( buffer, ldapMessageContainer );
-        // Check that everything is OK
-        LdapMessage ldapmessage = ( (LdapMessageContainer) ldapMessageContainer ).getLdapMessage();
-        LdapMessageWithPDU message = new LdapMessageWithPDU();
-        
-
-        message.setLdapMessage( ldapmessage );
-        message.setMessageId( ldapmessage.getMessageId() );
-
-        // Ici on test pour ne pas cr�er 2 entr� avec le meme messageID;
-        if ( message.getMessageId() != lastMessageId )
-        {
-            mess = new DefaultMutableTreeNode( transformToStringType( ldapmessage.getMessageType() ) + " [Id = "
-                    + ( (LdapMessage) ldapmessage ).getMessageId() + " ]" );
-
-            messTrue = new DefaultMutableTreeNode( message );
-            lastNode = mess;
-            lastMessNode = messTrue;
-            lastMessageId = message.getMessageId();
-            // mainFrame.getTop().add(mess);
-            mainFrame.getTreeModel().insertNodeInto( mess, mainFrame.getTop(), mainFrame.getTop().getChildCount() );
-            mainFrame.getLdapMessageTree().add( messTrue );
-            currentCount = 1;
-
-        }
-        else
-        {
-            mess = lastNode;
-            messTrue = lastMessNode;
-            currentCount++;
-        }
-
-        // String type = message.getProtocolOp().getClass().getSimpleName();
-        String type = transformToStringType( ldapmessage.getMessageType() );
-
-        // DefaultMutableTreeNode request = new DefaultMutableTreeNode(type +"
-        // ==>" + message.toString());
-        DefaultMutableTreeNode request = new DefaultMutableTreeNode( type + " N� " + currentCount );
-        // mess.add(request);
-        mainFrame.getTreeModel().insertNodeInto( request, mess, mess.getChildCount() );
-
-        messTrue.add( new DefaultMutableTreeNode( message ) );
-
-        int pduLength = buffer.position() - position;
-        byte[] bytes = buffer.array();
-        byte[] newBytes = new byte[pduLength];
-        System.arraycopy(bytes, position, newBytes, 0, pduLength );
-        
-        message.setDumpBytes( org.apache.asn1new.util.StringUtils.dumpBytes( newBytes ) );
-
-        // mainFrame.repaint();
-        // mainFrame.getTreeModel().reload(mainFrame.getTop());
-        return message.getLdapMessage().toString();
-    }
-
-    public String transformToStringType( int type )
-    {
-        String stringType;
-
-        switch ( type )
-        {
-            case 0 :
-                stringType = "ABANDON REQUEST";
-                break;
-            case 1 :
-                stringType = "ADD REQUEST";
-                break;
-            case 2 :
-                stringType = "ADD RESPONSE";
-                break;
-            case 3 :
-                stringType = "BIND REQUEST";
-                break;
-            case 4 :
-                stringType = "BIND RESPONSE";
-                break;
-            case 5 :
-                stringType = "COMPARE REQUEST";
-                break;
-            case 6 :
-                stringType = "COMPARE RESPONSE";
-                break;
-            case 7 :
-                stringType = "DEL REQUEST";
-                break;
-            case 8 :
-                stringType = "DEL RESPONSE";
-                break;
-            case 9 :
-                stringType = "EXTENDED REQUEST";
-                break;
-            case 10 :
-                stringType = "EXTENDED RESPONSE";
-                break;
-            case 11 :
-                stringType = "MODIFYDN REQUEST";
-                break;
-            case 12 :
-                stringType = "MODIFYDN RESPONSE";
-                break;
-            case 13 :
-                stringType = "MODIFY REQUEST";
-                break;
-            case 14 :
-                stringType = "MODIFY RESPONSE";
-                break;
-            case 15 :
-                stringType = "SEARCH REQUEST";
-                break;
-            case 16 :
-                stringType = "SEARCH RESULT DONE";
-                break;
-            case 17 :
-                stringType = "SEARCH RESULT ENTRY";
-                break;
-            case 18 :
-                stringType = "SEARCH RESULT REFERENCE";
-                break;
-            case 19 :
-                stringType = "UNBIND REQUEST";
-                break;
-            case -1 :
-                stringType = "UNKNOWN";
-                break;
-
-            default :
-                stringType = "UNKNOWN";
-                break;
-        }
-        return stringType;
-    }
-
-    public void run()
-    {
-        InputStream clientIn = null;
-        OutputStream clientOut = null;
-        InputStream serverIn = null;
-        OutputStream serverOut = null;
-        Socket toServer = null;
-        int r0 = -1;
-        int r1 = -1;
-        int ch = -1;
-        int i = -1;
-        long time0 = System.currentTimeMillis();
-        long time1 = time0 + timeout;
-
-        try
-        {
-            toServer = new Socket( host, port );
-            System.out.println( "open connection to:" + toServer + "(timeout=" + timeout + " ms)" );
-            clientIn = fromClient.getInputStream();
-            clientOut = new BufferedOutputStream( fromClient.getOutputStream() );
-            serverIn = toServer.getInputStream();
-            serverOut = new BufferedOutputStream( toServer.getOutputStream() );
-
-            while ( r0 != 0 || r1 != 0 || ( time1 - time0 ) <= timeout )
-            {
-                r0 = clientIn.available();
-
-                if ( r0 != 0 )
-                {
-                    System.out.println( "" );
-                    // LdapProxy.setTextIn("<<<" + r0 + " bytes from client
-                    // \n","red");
-                    System.out.println( "" );
-                    System.out.println( "<<<" + r0 + " bytes from client" );
-                    System.out.println( "<<<" + r1 + " bytes from server" );
-                }
-
-                ByteBuffer bb = null;
-
-                while ( ( r0 = clientIn.available() ) > 0 )
-                {
-                    byte[] in = new byte[r0];
-                    int k = 0;
-
-                    for ( i = 0; i < r0; i++ )
-                    {
-                        ch = clientIn.read();
-
-                        if ( ch != -1 )
-                        {
-                            in[k++] = (byte) ch;
-                            serverOut.write( ch );
-                        }
-                        else
-                        {
-                            System.out.println( "client stream closed" );
-                            // LdapProxy.setTextIn("client stream closed
-                            // \n","redbold");
-                        }
-                    }
-
-                    bb = ByteBuffer.allocate( r0 );
-                    bb.put( in );
-                    bb.flip();
-                    
-                    while ( bb.hasRemaining() )
-                    {
-                        decode( bb );
-                    }
-                    
-                    /*
-                     * LdapProxy.setTextIn("--->>>\n", "regular");
-                     * LdapProxy.setTextIn(result, "regular");
-                     * LdapProxy.setTextIn("----------------------------------\n",
-                     * "regular");
-                     */
-
-                    time0 = System.currentTimeMillis();
-                    serverOut.flush();
-                }
-
-                bb = null;
-
-                while ( ( r1 = serverIn.available() ) > 0 )
-                {
-                    System.out.println( "" );
-                    System.out.println( ">>>" + r1 + " bytes from server" );
-                    // LdapProxy.setTextOut(">>>" + r1 + " bytes from server
-                    // \n","red");
-                    System.out.println( "" );
-                    System.out.println( ">>>" + r1 + " bytes from server" );
-
-                    byte[] out = new byte[r1];
-                    int k = 0;
-
-                    for ( i = 0; i < r1; i++ )
-                    {
-                        ch = serverIn.read();
-
-                        if ( ch != -1 )
-                        {
-                            out[k++] = (byte) ch;
-                        }
-                        else
-                        {
-                            System.out.println( "server stream closed" );
-                            // LdapProxy.setTextOut("server stream closed
-                            // \n","redbold");
-                            break;
-                        }
-
-                        clientOut.write( ch );
-                    }
-
-                    bb = ByteBuffer.allocate( r1 );
-                    bb.put( out );
-                    bb.flip();
-
-                    while ( true )
-                    {
-                        try
-                        {
-                            String result = decode( bb );
-                            System.out.println( result );
-                            /*
-                             * LdapProxy.setTextOut("<<<---\n", "blue");
-                             * LdapProxy.setTextOut(result, "blue");
-                             * LdapProxy.setTextOut("----------------------------------\n",
-                             * "regular");
-                             */
-                            if ( bb.hasRemaining() == false )
-                            {
-                                break;
-                            }
-                        }
-                        catch ( DecoderException de )
-                        {
-                            StringBuffer result = new StringBuffer();
-                            result.append( de.getMessage() ).append( '\n' );
-
-                            byte[] tmp = new byte[out.length - bb.position()];
-                            System.arraycopy( out, bb.position(), tmp, 0, out.length - bb.position() );
-                            result.append( StringUtils.dumpBytes( tmp ) );
-
-                            System.out.println( result );
-                            /*
-                             * LdapProxy.setTextOut("<<<---\n", "regular");
-                             * LdapProxy.setTextOut(new String(tmp), "regular");
-                             * LdapProxy.setTextOut("----------------------------------\n",
-                             * "regular");
-                             */
-                            break;
-                        }
-                    }
-
-                    time0 = new Date().getTime();
-                    clientOut.flush();
-                }
-                if ( r0 == 0 && r1 == 0 )
-                {
-                    time1 = new Date().getTime();
-                    Thread.sleep( 100 );
-                    // Proxy.display("waiting:"+(time1-time0)+" ms");
-                }
-            }
-        }
-        catch ( Throwable t )
-        {
-            System.out.println( "i=" + i + " ch=" + ch );
-            t.printStackTrace( System.err );
-        }
-        finally
-        {
-            try
-            {
-                clientIn.close();
-                clientOut.close();
-                serverIn.close();
-                serverOut.close();
-                fromClient.close();
-                toServer.close();
-                LdapProxy.quit( time1 - time0 );
-            }
-            catch ( Exception e )
-            {
-                e.printStackTrace( System.err );
-            }
-        }
-    }
-
-    /*
-     * public void setTextIn(JTextPane textIn) { this.textIn = textIn; } public
-     * void setTextOut(JTextPane textOut) { this.textOut = textOut; }
-     */
-
-    public void setMainFrame( MainFrame mainframe )
-    {
-        this.mainFrame = mainframe;
-    }
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.ldap.proxy.impl;
+
+import java.io.BufferedOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.ByteBuffer;
+
+import java.util.Date;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+
+import org.apache.asn1.codec.DecoderException;
+import org.apache.asn1new.ber.Asn1Decoder;
+import org.apache.asn1new.ber.containers.IAsn1Container;
+import org.apache.asn1new.ldap.codec.LdapDecoder;
+import org.apache.asn1new.ldap.codec.LdapMessageContainer;
+import org.apache.asn1new.ldap.pojo.LdapMessage;
+import org.apache.asn1new.util.StringUtils;
+import org.apache.ldap.proxy.gui.MainFrame;
+
+/**
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+class ProxyConnection extends Thread
+{
+
+    Socket                 fromClient;
+
+    String                 host;
+
+    int                    port;
+
+    long                   timeout;
+
+    MainFrame              mainFrame;
+
+    int                    lastMessageId = -1;
+
+    DefaultMutableTreeNode lastNode;
+
+    DefaultMutableTreeNode lastMessNode;
+
+    int                    currentCount  = 0;
+
+    ProxyConnection(Socket s, String host, int port, long timeout)
+    {
+        fromClient = s;
+        this.host = host;
+        this.port = port;
+        this.timeout = timeout;
+
+    }
+
+    private String decode( ByteBuffer buffer ) throws DecoderException
+    {
+        int position = buffer.position();
+
+        DefaultMutableTreeNode mess;
+
+        // DefaultMutableTreeNode messTrue;
+        DefaultMutableTreeNode messTrue;
+
+        Asn1Decoder ldapDecoder = new LdapDecoder();
+
+        // Allocate a LdapMessageContainer Container
+        IAsn1Container ldapMessageContainer = new LdapMessageContainer();
+
+        // Decode the PDU
+        ldapDecoder.decode( buffer, ldapMessageContainer );
+        // Check that everything is OK
+        LdapMessage ldapmessage = ( (LdapMessageContainer) ldapMessageContainer ).getLdapMessage();
+        LdapMessageWithPDU message = new LdapMessageWithPDU();
+        
+
+        message.setLdapMessage( ldapmessage );
+        message.setMessageId( ldapmessage.getMessageId() );
+
+        // check the Id to verfy if it's a new Entry or not
+        if ( message.getMessageId() != lastMessageId )
+        {
+            mess = new DefaultMutableTreeNode( transformToStringType( ldapmessage.getMessageType() ) + " [Id = "
+                    + ( (LdapMessage) ldapmessage ).getMessageId() + " ]" );
+
+            messTrue = new DefaultMutableTreeNode( message );
+            lastNode = mess;
+            lastMessNode = messTrue;
+            lastMessageId = message.getMessageId();
+            // mainFrame.getTop().add(mess);
+            mainFrame.getTreeModel().insertNodeInto( mess, mainFrame.getTop(), mainFrame.getTop().getChildCount() );
+            mainFrame.getLdapMessageTree().add( messTrue );
+            currentCount = 1;
+
+        }
+        else
+        {
+            mess = lastNode;
+            messTrue = lastMessNode;
+            currentCount++;
+        }
+
+          String type = transformToStringType( ldapmessage.getMessageType() );
+
+        DefaultMutableTreeNode request = new DefaultMutableTreeNode( type );
+        mainFrame.getTreeModel().insertNodeInto( request, mess, mess.getChildCount() );
+
+        messTrue.add( new DefaultMutableTreeNode( message ) );
+
+        int pduLength = buffer.position() - position;
+        byte[] bytes = buffer.array();
+        byte[] newBytes = new byte[pduLength];
+        System.arraycopy(bytes, position, newBytes, 0, pduLength );
+
+        //TODO only one methode to Dump including buffer and position.
+        message.setDumpBytes( org.apache.asn1new.util.StringUtils.dumpBytes( newBytes ) );
+
+        // mainFrame.repaint();
+        // mainFrame.getTreeModel().reload(mainFrame.getTop());
+        return message.getLdapMessage().toString();
+    }
+
+    public String transformToStringType( int type )
+    {
+        String stringType;
+
+        switch ( type )
+        {
+            case 0 :
+                stringType = "ABANDON REQUEST";
+                break;
+            case 1 :
+                stringType = "ADD REQUEST";
+                break;
+            case 2 :
+                stringType = "ADD RESPONSE";
+                break;
+            case 3 :
+                stringType = "BIND REQUEST";
+                break;
+            case 4 :
+                stringType = "BIND RESPONSE";
+                break;
+            case 5 :
+                stringType = "COMPARE REQUEST";
+                break;
+            case 6 :
+                stringType = "COMPARE RESPONSE";
+                break;
+            case 7 :
+                stringType = "DEL REQUEST";
+                break;
+            case 8 :
+                stringType = "DEL RESPONSE";
+                break;
+            case 9 :
+                stringType = "EXTENDED REQUEST";
+                break;
+            case 10 :
+                stringType = "EXTENDED RESPONSE";
+                break;
+            case 11 :
+                stringType = "MODIFYDN REQUEST";
+                break;
+            case 12 :
+                stringType = "MODIFYDN RESPONSE";
+                break;
+            case 13 :
+                stringType = "MODIFY REQUEST";
+                break;
+            case 14 :
+                stringType = "MODIFY RESPONSE";
+                break;
+            case 15 :
+                stringType = "SEARCH REQUEST";
+                break;
+            case 16 :
+                stringType = "SEARCH RESULT DONE";
+                break;
+            case 17 :
+                stringType = "SEARCH RESULT ENTRY";
+                break;
+            case 18 :
+                stringType = "SEARCH RESULT REFERENCE";
+                break;
+            case 19 :
+                stringType = "UNBIND REQUEST";
+                break;
+            case -1 :
+                stringType = "UNKNOWN";
+                break;
+
+            default :
+                stringType = "UNKNOWN";
+                break;
+        }
+        return stringType;
+    }
+
+    public void run()
+    {
+        InputStream clientIn = null;
+        OutputStream clientOut = null;
+        InputStream serverIn = null;
+        OutputStream serverOut = null;
+        Socket toServer = null;
+        int r0 = -1;
+        int r1 = -1;
+        int ch = -1;
+        int i = -1;
+        long time0 = System.currentTimeMillis();
+        long time1 = time0 + timeout;
+
+        try
+        {
+            toServer = new Socket( host, port );
+            System.out.println( "open connection to:" + toServer + "(timeout=" + timeout + " ms)" );
+            clientIn = fromClient.getInputStream();
+            clientOut = new BufferedOutputStream( fromClient.getOutputStream() );
+            serverIn = toServer.getInputStream();
+            serverOut = new BufferedOutputStream( toServer.getOutputStream() );
+
+            while ( r0 != 0 || r1 != 0 || ( time1 - time0 ) <= timeout )
+            {
+                r0 = clientIn.available();
+
+                if ( r0 != 0 )
+                {
+                    System.out.println( "" );
+                    // LdapProxy.setTextIn("<<<" + r0 + " bytes from client
+                    // \n","red");
+                    System.out.println( "" );
+                    System.out.println( "<<<" + r0 + " bytes from client" );
+                    System.out.println( "<<<" + r1 + " bytes from server" );
+                }
+
+                ByteBuffer bb = null;
+
+                while ( ( r0 = clientIn.available() ) > 0 )
+                {
+                    byte[] in = new byte[r0];
+                    int k = 0;
+
+                    for ( i = 0; i < r0; i++ )
+                    {
+                        ch = clientIn.read();
+
+                        if ( ch != -1 )
+                        {
+                            in[k++] = (byte) ch;
+                            serverOut.write( ch );
+                        }
+                        else
+                        {
+                            System.out.println( "client stream closed" );
+                            // LdapProxy.setTextIn("client stream closed
+                            // \n","redbold");
+                        }
+                    }
+
+                    bb = ByteBuffer.allocate( r0 );
+                    bb.put( in );
+                    bb.flip();
+                    
+                    while ( bb.hasRemaining() )
+                    {
+                        decode( bb );
+                    }
+                    
+                    /*
+                     * LdapProxy.setTextIn("--->>>\n", "regular");
+                     * LdapProxy.setTextIn(result, "regular");
+                     * LdapProxy.setTextIn("----------------------------------\n",
+                     * "regular");
+                     */
+
+                    time0 = System.currentTimeMillis();
+                    serverOut.flush();
+                }
+
+                bb = null;
+
+                while ( ( r1 = serverIn.available() ) > 0 )
+                {
+                    System.out.println( "" );
+                    System.out.println( ">>>" + r1 + " bytes from server" );
+                    // LdapProxy.setTextOut(">>>" + r1 + " bytes from server
+                    // \n","red");
+                    System.out.println( "" );
+                    System.out.println( ">>>" + r1 + " bytes from server" );
+
+                    byte[] out = new byte[r1];
+                    int k = 0;
+
+                    for ( i = 0; i < r1; i++ )
+                    {
+                        ch = serverIn.read();
+
+                        if ( ch != -1 )
+                        {
+                            out[k++] = (byte) ch;
+                        }
+                        else
+                        {
+                            System.out.println( "server stream closed" );
+                            // LdapProxy.setTextOut("server stream closed
+                            // \n","redbold");
+                            break;
+                        }
+
+                        clientOut.write( ch );
+                    }
+
+                    bb = ByteBuffer.allocate( r1 );
+                    bb.put( out );
+                    bb.flip();
+
+                    while ( true )
+                    {
+                        try
+                        {
+                            String result = decode( bb );
+                            System.out.println( result );
+                            /*
+                             * LdapProxy.setTextOut("<<<---\n", "blue");
+                             * LdapProxy.setTextOut(result, "blue");
+                             * LdapProxy.setTextOut("----------------------------------\n",
+                             * "regular");
+                             */
+                            if ( bb.hasRemaining() == false )
+                            {
+                                break;
+                            }
+                        }
+                        catch ( DecoderException de )
+                        {
+                            StringBuffer result = new StringBuffer();
+                            result.append( de.getMessage() ).append( '\n' );
+
+                            byte[] tmp = new byte[out.length - bb.position()];
+                            System.arraycopy( out, bb.position(), tmp, 0, out.length - bb.position() );
+                            result.append( StringUtils.dumpBytes( tmp ) );
+
+                            System.out.println( result );
+                            /*
+                             * LdapProxy.setTextOut("<<<---\n", "regular");
+                             * LdapProxy.setTextOut(new String(tmp), "regular");
+                             * LdapProxy.setTextOut("----------------------------------\n",
+                             * "regular");
+                             */
+                            break;
+                        }
+                    }
+
+                    time0 = new Date().getTime();
+                    clientOut.flush();
+                }
+                if ( r0 == 0 && r1 == 0 )
+                {
+                    time1 = new Date().getTime();
+                    Thread.sleep( 100 );
+                    // Proxy.display("waiting:"+(time1-time0)+" ms");
+                }
+            }
+        }
+        catch ( Throwable t )
+        {
+            System.out.println( "i=" + i + " ch=" + ch );
+            t.printStackTrace( System.err );
+        }
+        finally
+        {
+            try
+            {
+                clientIn.close();
+                clientOut.close();
+                serverIn.close();
+                serverOut.close();
+                fromClient.close();
+                toServer.close();
+                LdapProxy.quit( time1 - time0 );
+            }
+            catch ( Exception e )
+            {
+                e.printStackTrace( System.err );
+            }
+        }
+    }
+
+    /*
+     * public void setTextIn(JTextPane textIn) { this.textIn = textIn; } public
+     * void setTextOut(JTextPane textOut) { this.textOut = textOut; }
+     */
+
+    public void setMainFrame( MainFrame mainframe )
+    {
+        this.mainFrame = mainframe;
+    }
 }