You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2005/09/16 23:30:35 UTC

svn commit: r289655 [2/2] - in /webservices/axis2/trunk/java/modules: core/src/org/apache/axis2/util/ tool/src/org/apache/axis2/tool/tracer/

Added: webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketRR.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketRR.java?rev=289655&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketRR.java (added)
+++ webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketRR.java Fri Sep 16 14:30:29 2005
@@ -0,0 +1,352 @@
+/*
+ * Copyright 2004,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.axis2.tool.tracer;
+
+import javax.swing.JTextArea;
+import javax.swing.table.TableModel;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+/**
+ * this class handles the pumping of data from the incoming socket to the
+ * outgoing socket
+ */
+class SocketRR extends Thread {
+
+	/**
+     * Field inSocket
+     */
+    Socket inSocket = null;
+
+    /**
+     * Field outSocket
+     */
+    Socket outSocket = null;
+
+    /**
+     * Field textArea
+     */
+    JTextArea textArea;
+
+    /**
+     * Field in
+     */
+    InputStream in = null;
+
+    /**
+     * Field out
+     */
+    OutputStream out = null;
+
+    /**
+     * Field xmlFormat
+     */
+    boolean xmlFormat;
+
+    /**
+     * Field done
+     */
+    volatile boolean done = false;
+
+    /**
+     * Field tmodel
+     */
+    volatile long elapsed = 0;
+    
+    /**
+     * Field tmodel
+     */
+    TableModel tmodel = null;
+
+    /**
+     * Field tableIndex
+     */
+    int tableIndex = 0;
+
+    /**
+     * Field type
+     */
+    String type = null;
+
+    /**
+     * Field myConnection
+     */
+    Connection myConnection = null;
+
+    /**
+     * Field slowLink
+     */
+    SlowLinkSimulator slowLink;
+
+    /**
+     * Constructor SocketRR
+     *
+     * @param c
+     * @param inputSocket
+     * @param inputStream
+     * @param outputSocket
+     * @param outputStream
+     * @param _textArea
+     * @param format
+     * @param tModel
+     * @param index
+     * @param type
+     * @param slowLink
+     */
+    public SocketRR(Connection c, Socket inputSocket,
+                    InputStream inputStream, Socket outputSocket,
+                    OutputStream outputStream, JTextArea _textArea,
+                    boolean format, TableModel tModel, int index,
+                    final String type, SlowLinkSimulator slowLink) {
+        inSocket = inputSocket;
+        in = inputStream;
+        outSocket = outputSocket;
+        out = outputStream;
+        textArea = _textArea;
+        xmlFormat = format;
+        tmodel = tModel;
+        tableIndex = index;
+        this.type = type;
+        myConnection = c;
+        this.slowLink = slowLink;
+        start();
+    }
+
+    /**
+     * Method isDone
+     *
+     * @return boolean
+     */
+    public boolean isDone() {
+        return done;
+    }
+
+    public String getElapsed() {
+    		return String.valueOf(elapsed);
+    }
+    
+    /**
+     * Method run
+     */
+    public void run() {
+        try {
+            byte[] buffer = new byte[4096];
+            byte[] tmpbuffer = new byte[8192];
+            int saved = 0;
+            int len;
+            int i1, i2;
+            int i;
+            int reqSaved = 0;
+            int tabWidth = 3;
+            boolean atMargin = true;
+            int thisIndent = -1, nextIndent = -1, previousIndent = -1;
+            if (tmodel != null) {
+                String tmpStr = (String) tmodel.getValueAt(tableIndex,
+                		HTTPTracer.REQ_COLUMN);
+                if (!"".equals(tmpStr)) {
+                    reqSaved = tmpStr.length();
+                }
+            }
+            long start = System.currentTimeMillis();
+            a:
+            for (; ;) {
+            	
+                elapsed = System.currentTimeMillis() - start;
+            	
+                if (done) {
+                    break;
+                }
+                
+                // try{
+                // len = in.available();
+                // }catch(Exception e){len=0;}
+                len = buffer.length;
+
+                // Used to be 1, but if we block it doesn't matter
+                // however 1 will break with some servers, including apache
+                if (len == 0) {
+                    len = buffer.length;
+                }
+                if (saved + len > buffer.length) {
+                    len = buffer.length - saved;
+                }
+                int len1 = 0;
+                while (len1 == 0) {
+                    try {
+                        len1 = in.read(buffer, saved, len);
+                    } catch (Exception ex) {
+                        if (done && (saved == 0)) {
+                            break a;
+                        }
+                        len1 = -1;
+                        break;
+                    }
+                }
+                len = len1;
+                if ((len == -1) && (saved == 0)) {
+                    break;
+                }
+                if (len == -1) {
+                    done = true;
+                }
+
+                // No matter how we may (or may not) format it, send it
+                // on unformatted - we don't want to mess with how its
+                // sent to the other side, just how its displayed
+                if ((out != null) && (len > 0)) {
+                    slowLink.pump(len);
+                    out.write(buffer, saved, len);
+                }
+                
+                if ((tmodel != null) && (reqSaved < 50)) {
+                    String old = (String) tmodel.getValueAt(tableIndex,
+                    		HTTPTracer.REQ_COLUMN);
+                    old = old + new String(buffer, saved, len);
+                    if (old.length() > 50) {
+                        old = old.substring(0, 50);
+                    }
+                    reqSaved = old.length();
+                    if ((i = old.indexOf('\n')) > 0) {
+                        old = old.substring(0, i - 1);
+                        reqSaved = 50;
+                    }
+                    tmodel.setValueAt(old, tableIndex, HTTPTracer.REQ_COLUMN);
+                }
+                
+                
+               if (xmlFormat) {
+
+                    // Do XML Formatting
+                    boolean inXML = false;
+                    int bufferLen = saved;
+                    if (len != -1) {
+                        bufferLen += len;
+                    }
+                    i1 = 0;
+                    i2 = 0;
+                    saved = 0;
+                    for (; i1 < bufferLen; i1++) {
+
+                        // Except when we're at EOF, saved last char
+                        if ((len != -1) && (i1 + 1 == bufferLen)) {
+                            saved = 1;
+                            break;
+                        }
+                        thisIndent = -1;
+                        if ((buffer[i1] == '<')
+                                && (buffer[i1 + 1] != '/')) {
+                            previousIndent = nextIndent++;
+                            thisIndent = nextIndent;
+                            inXML = true;
+                        }
+                        if ((buffer[i1] == '<')
+                                && (buffer[i1 + 1] == '/')) {
+                            if (previousIndent > nextIndent) {
+                                thisIndent = nextIndent;
+                            }
+                            previousIndent = nextIndent--;
+                            inXML = true;
+                        }
+                        if ((buffer[i1] == '/')
+                                && (buffer[i1 + 1] == '>')) {
+                            previousIndent = nextIndent--;
+                            inXML = true;
+                        }
+                        if (thisIndent != -1) {
+                            if (thisIndent > 0) {
+                                tmpbuffer[i2++] = (byte) '\n';
+                            }
+                            for (i = tabWidth * thisIndent; i > 0; i--) {
+                                tmpbuffer[i2++] = (byte) ' ';
+                            }
+                        }
+                        atMargin = ((buffer[i1] == '\n')
+                                || (buffer[i1] == '\r'));
+                        if (!inXML || !atMargin) {
+                            tmpbuffer[i2++] = buffer[i1];
+                        }
+                    }
+                    textArea.append(new String(tmpbuffer, 0, i2));
+
+                    // Shift saved bytes to the beginning
+                    for (i = 0; i < saved; i++) {
+                        buffer[i] = buffer[bufferLen - saved + i];
+                    }
+                } else {
+                    textArea.append(new String(buffer, 0, len));
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            done = true;
+            try {
+                if (out != null) {
+                    out.flush();
+                    if (null != outSocket) {
+                        outSocket.shutdownOutput();
+                    } else {
+                        out.close();
+                    }
+                    out = null;
+                }
+            } catch (Exception e) {
+            }
+            try {
+                if (in != null) {
+                    if (inSocket != null) {
+                        inSocket.shutdownInput();
+                    } else {
+                        in.close();
+                    }
+                    in = null;
+                }
+            } catch (Exception e) {
+            }
+            myConnection.wakeUp();
+        }
+    }
+
+    /**
+     * Method halt
+     */
+    public void halt() {
+        try {
+            if (inSocket != null) {
+                inSocket.close();
+            }
+            if (outSocket != null) {
+                outSocket.close();
+            }
+            inSocket = null;
+            outSocket = null;
+            if (in != null) {
+                in.close();
+            }
+            if (out != null) {
+                out.close();
+            }
+            in = null;
+            out = null;
+            done = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

Added: webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketWaiter.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketWaiter.java?rev=289655&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketWaiter.java (added)
+++ webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/SocketWaiter.java Fri Sep 16 14:30:29 2005
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2004,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.axis2.tool.tracer;
+
+import javax.swing.JLabel;
+import java.awt.Color;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * wait for incoming connections, spawn a connection thread when
+ * stuff comes in.
+ */
+class SocketWaiter extends Thread {
+
+   /**
+    * Field sSocket
+    */
+   ServerSocket sSocket = null;
+
+   /**
+    * Field listener
+    */
+   Listener listener;
+
+   /**
+    * Field port
+    */
+   int port;
+
+   /**
+    * Field pleaseStop
+    */
+   boolean pleaseStop = false;
+
+   /**
+    * Constructor SocketWaiter
+    *
+    * @param l
+    * @param p
+    */
+   public SocketWaiter(Listener l, int p) {
+       listener = l;
+       port = p;
+       start();
+   }
+
+   /**
+    * Method run
+    */
+   public void run() {
+       try {
+           listener.setLeft(
+                   new JLabel(
+                		   HTTPTracer.getMessage("wait00",
+                                   " Waiting for Connection...")));
+           listener.repaint();
+           sSocket = new ServerSocket(port);
+           for (; ;) {
+               Socket inSocket = sSocket.accept();
+               if (pleaseStop) {
+                   break;
+               }
+               new Connection(listener, inSocket);
+               inSocket = null;
+           }
+       } catch (Exception exp) {
+           if (!"socket closed".equals(exp.getMessage())) {
+               JLabel tmp = new JLabel(exp.toString());
+               tmp.setForeground(Color.red);
+               listener.setLeft(tmp);
+               listener.setRight(new JLabel(""));
+               listener.stop();
+           }
+       }
+   }
+
+   /**
+    * force a halt by connecting to self and then closing the server socket
+    */
+   public void halt() {
+       try {
+           pleaseStop = true;
+           new Socket("127.0.0.1", port);
+           if (sSocket != null) {
+               sSocket.close();
+           }
+       } catch (Exception e) {
+           e.printStackTrace();
+       }
+   }
+}

Added: webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/httptracer.properties
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/httptracer.properties?rev=289655&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/httptracer.properties (added)
+++ webservices/axis2/trunk/java/modules/tool/src/org/apache/axis2/tool/tracer/httptracer.properties Fri Sep 16 14:30:29 2005
@@ -0,0 +1,59 @@
+# Translation instructions.
+# 1.  Each message line is of the form key=value.  Translate the value, DO NOT translate the key.
+# 2.  The messages may contain arguments that will be filled in by the runtime.  These are of the form:  {0}, {1}, etc.  These must appear as is in the message, though the order may be changed to support proper language syntax.
+# 3.  If a single quote character is to appear in the resulting message, it must appear in this file as two consecutive single quote characters.
+# 4.  Lines beginning with "#" (like this one) are comment lines and may contain translation instructions.  They need not be translated unless your translated file, rather than this file, will serve as a base for other translators.
+
+actAs00=Act as a...
+active00=Active
+add00=Add
+admin00=Admin
+close00=Close
+done00=Done
+resp00=Resp
+req00=Req
+error00=Error
+host00=Host:
+hostname00=Hostname
+listener00=Listener
+listenPort00=Listen Port #
+listenPort01=Listen Port:
+mostRecent00=Most Recent
+newTCP00=Create a new HTTP Tracer...
+options00=Options
+port00=Port #
+port01=Port
+port02=Port:
+proxy00=Proxy
+proxySupport00=HTTP Proxy Support
+removeAll00=Remove All
+removeSelected00=Remove Selected
+request00=Request...
+request01=Request
+requestHost00=Request Host
+resend00=Resend
+response00=Response
+save00=Save
+start00=Start
+state00=State
+stop00=Stop
+switch00=Switch Layout
+targetHost00=Target Host
+targetHost01=Target Host:
+targetHostname00=Target Hostname
+targetPort00=Target Port #
+targetPort01=Target Port:
+time00=Time
+usage00=Usage:
+wait00=Waiting for Connection...
+wait01=Waiting for Connection
+
+# NOTE:  in xmlFormat00, do not translate "XML"
+xmlFormat00=XML Format
+
+#NOTE: this is a SimpleDateFormat format string to declare the layout of date
+#and time in the message log. It does need i18n, but not 'translation', per se.
+dateformat00=yyyy-MM-dd HH:mm:ss
+delay00=Simulate Slow Connection
+delay01=Bytes per Pause
+delay02=Delay in Milliseconds
\ No newline at end of file