Author: veithen
Date: Fri May 29 15:51:04 2009
New Revision: 780019

URL: http://svn.apache.org/viewvc?rev=780019&view=rev
Log:
Added some basic support for SSL.

Added:
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
   (with props)
Modified:
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
    
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Configuration.java
 Fri May 29 15:51:04 2009
@@ -16,10 +16,15 @@
 
 package org.apache.ws.commons.tcpmon.core;
 
+import javax.net.ServerSocketFactory;
+import javax.net.SocketFactory;
+
 import org.apache.ws.commons.tcpmon.core.filter.throttle.ThrottleConfiguration;
 
 public class Configuration implements Cloneable {
+    private ServerSocketFactory serverSocketFactory;
     private int listenPort;
+    private SocketFactory socketFactory;
     private String targetHost;
     private int targetPort;
     private boolean proxy;
@@ -51,6 +56,14 @@
         }
     }
 
+    public ServerSocketFactory getServerSocketFactory() {
+        return serverSocketFactory != null ? serverSocketFactory : 
ServerSocketFactory.getDefault();
+    }
+
+    public void setServerSocketFactory(ServerSocketFactory 
serverSocketFactory) {
+        this.serverSocketFactory = serverSocketFactory;
+    }
+
     public int getListenPort() {
         return listenPort;
     }
@@ -59,6 +72,14 @@
         this.listenPort = listenPort;
     }
 
+    public SocketFactory getSocketFactory() {
+        return socketFactory != null ? socketFactory : 
SocketFactory.getDefault();
+    }
+
+    public void setSocketFactory(SocketFactory socketFactory) {
+        this.socketFactory = socketFactory;
+    }
+
     public String getTargetHost() {
         return targetHost;
     }

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/Connection.java
 Fri May 29 15:51:04 2009
@@ -31,6 +31,8 @@
 import java.io.OutputStream;
 import java.net.Socket;
 
+import javax.net.SocketFactory;
+
 /**
  * a connection listens to a single current connection
  */
@@ -103,6 +105,7 @@
             String HTTPProxyHost = config.getHttpProxyHost();
             int HTTPProxyPort = config.getHttpProxyPort();
             ThrottleConfiguration throttleConfig = 
config.getThrottleConfiguration();
+            final SocketFactory socketFactory = config.getSocketFactory();
             String fromHost;
             if (inSocket != null) {
                 fromHost = (inSocket.getInetAddress()).getHostName();
@@ -130,7 +133,7 @@
                     protected void handleConnection(String host, int port) {
                         requestResponse.setTarget(host, port);
                         try {
-                            outSocket = new Socket(host, port);
+                            outSocket = socketFactory.createSocket(host, port);
                         } catch (IOException ex) {
                             throw new StreamException(ex);
                         }
@@ -139,7 +142,7 @@
             } else {
                 requestResponse.setTarget(targetHost, targetPort);
                 requestFilter.addHandler(new HttpHeaderRewriter("Host", 
targetHost + ":" + targetPort));
-                outSocket = new Socket(targetHost, targetPort);
+                outSocket = socketFactory.createSocket(targetHost, targetPort);
             }
             // We log the request data at this stage. This means that the user 
will see the request
             // as if it had been sent directly from the client to the server 
(without TCPMon or a proxy
@@ -147,7 +150,7 @@
             requestPipeline.addFilter(new 
Tee(requestResponse.getRequestOutputStream()));
             if (HTTPProxyHost != null) {
                 requestFilter.addHandler(new 
HttpProxyClientHandler(targetHost, targetPort));
-                outSocket = new Socket(HTTPProxyHost, HTTPProxyPort);
+                outSocket = socketFactory.createSocket(HTTPProxyHost, 
HTTPProxyPort);
             }
             if (throttleConfig != null) {
                 requestPipeline.addFilter(new Throttle(throttleConfig));

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/SocketWaiter.java
 Fri May 29 15:51:04 2009
@@ -21,6 +21,8 @@
 import java.util.Iterator;
 import java.util.Vector;
 
+import javax.net.ServerSocketFactory;
+
 /**
  * wait for incoming connections, spawn a connection thread when
  * stuff comes in.
@@ -37,6 +39,8 @@
      */
     AbstractListener listener;
 
+    private final ServerSocketFactory serverSocketFactory;
+    
     /**
      * Field port
      */
@@ -55,8 +59,9 @@
      * @param l
      * @param p
      */
-    public SocketWaiter(AbstractListener l, int p) {
+    public SocketWaiter(AbstractListener l, ServerSocketFactory 
serverSocketFactory, int p) {
         listener = l;
+        this.serverSocketFactory = serverSocketFactory;
         port = p;
         start();
     }
@@ -67,7 +72,7 @@
     public void run() {
         try {
             listener.onServerSocketStart();
-            sSocket = new ServerSocket(port);
+            sSocket = serverSocketFactory.createServerSocket(port);
             for (; ;) {
                 Socket inSocket = sSocket.accept();
                 if (pleaseStop) {

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-eclipse-plugin/src/main/java/org/apache/ws/commons/tcpmon/eclipse/ui/Listener.java
 Fri May 29 15:51:04 2009
@@ -387,12 +387,12 @@
     }
 
     public void start() {
-        int port = Integer.parseInt(portField.getText());
+        Configuration config = getConfiguration();
+        int port = config.getListenPort();
         portField.setText("" + port);
         portTabItem.setText(TCPMonBundle.getMessage("port01", "Port") + " " + 
port);
-        int tmp = Integer.parseInt(tPortField.getText());
-        tPortField.setText("" + tmp);
-        sw = new SocketWaiter(this, port);
+        tPortField.setText("" + config.getTargetPort());
+        sw = new SocketWaiter(this, config.getServerSocketFactory(), port);
         stopButton.setText(TCPMonBundle.getMessage("stop00", "Stop"));
         portField.setEditable(false);
         hostField.setEditable(false);

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/AdminPane.java
 Fri May 29 15:51:04 2009
@@ -16,6 +16,8 @@
 
 package org.apache.ws.commons.tcpmon;
 
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
 import javax.swing.Box;
 import javax.swing.ButtonGroup;
 import javax.swing.JButton;
@@ -42,6 +44,7 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.security.GeneralSecurityException;
 
 /**
  * this is the admin page
@@ -112,6 +115,10 @@
      * Field delayBox
      */
     public JCheckBox delayBox;
+    
+//    private final JCheckBox incomingSSLBox;
+    
+    private final JCheckBox outgoingSSLBox;
 
     /**
      * Constructor AdminPage
@@ -356,7 +363,13 @@
                 }
             }
         });
-
+        
+        // SSL options
+        c.anchor = GridBagConstraints.WEST;
+        c.gridwidth = GridBagConstraints.REMAINDER;
+//        opts.add(incomingSSLBox = new JCheckBox("Use SSL for incoming 
connections"), c); // TODO: i18n
+        opts.add(outgoingSSLBox = new JCheckBox("Use SSL for outgoing 
connections"), c); // TODO: i18n
+        
         // Spacer
         // ////////////////////////////////////////////////////////////////
         mainPane.add(Box.createRigidArea(new Dimension(1, 10)), c);
@@ -427,6 +440,16 @@
             config.setHttpProxyPort(Integer.parseInt(text));
         }
         
+        if (outgoingSSLBox.isSelected()) {
+            try {
+                SSLContext ctx = SSLContext.getInstance("SSL");
+                ctx.init(null, new TrustManager[] { new 
NoValidateCertTrustManager() }, null);
+                config.setSocketFactory(ctx.getSocketFactory());
+            } catch (GeneralSecurityException ex) {
+                throw new Error(ex);
+            }
+        }
+        
         return config;
     }
     

Modified: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java?rev=780019&r1=780018&r2=780019&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
 (original)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/Listener.java
 Fri May 29 15:51:04 2009
@@ -427,13 +427,13 @@
      */
     public void start() {
         if (sw == null) {
-            int port = Integer.parseInt(portField.getText());
+            Configuration config = getConfiguration();
+            int port = config.getListenPort();
             portField.setText("" + port);
             int i = notebook.indexOfComponent(panel);
             notebook.setTitleAt(i, TCPMonBundle.getMessage("port01", "Port") + 
" " + port);
-            int tmp = Integer.parseInt(tPortField.getText());
-            tPortField.setText("" + tmp);
-            sw = new SocketWaiter(this, port);
+            tPortField.setText("" + config.getTargetPort());
+            sw = new SocketWaiter(this, config.getServerSocketFactory(), port);
             startButton.setSelected(true);
             portField.setEditable(false);
             hostField.setEditable(false);

Added: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java?rev=780019&view=auto
==============================================================================
--- 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
 (added)
+++ 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
 Fri May 29 15:51:04 2009
@@ -0,0 +1,44 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.ws.commons.tcpmon;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * Trust manager accepting any certificate.
+ */
+public class NoValidateCertTrustManager implements X509TrustManager {
+    public void checkClientTrusted(X509Certificate[] chain, String authType)
+            throws CertificateException {
+        // Do nothing: we accept any certificate
+    }
+
+    public void checkServerTrusted(X509Certificate[] chain, String authType)
+            throws CertificateException {
+        // Do nothing: we accept any certificate
+    }
+
+    public X509Certificate[] getAcceptedIssuers() {
+        return new X509Certificate[0];
+    }
+}

Propchange: 
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-ui/src/main/java/org/apache/ws/commons/tcpmon/NoValidateCertTrustManager.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to