[mod_cluster-commits] mod_cluster SVN: r784 - trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Apr 4 10:01:42 EDT 2012


Author: jfrederic.clere at jboss.com
Date: 2012-04-04 10:01:42 -0400 (Wed, 04 Apr 2012)
New Revision: 784

Modified:
   trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPHandler.java
   trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPRequestFactory.java
Log:
Java part of MODCLUSTER-298


Modified: trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPHandler.java
===================================================================
--- trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPHandler.java	2012-04-04 14:00:15 UTC (rev 783)
+++ trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPHandler.java	2012-04-04 14:01:42 UTC (rev 784)
@@ -31,6 +31,7 @@
 import java.io.OutputStreamWriter;
 import java.io.Serializable;
 import java.io.Writer;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.Socket;
@@ -810,7 +811,15 @@
         private synchronized Socket getConnection() throws IOException {
             if ((this.socket == null) || this.socket.isClosed()) {
                 this.socket = this.socketFactory.createSocket();
-                this.socket.connect(this.socketAddress, this.socketTimeout);
+                InetAddress address = this.socketAddress.getAddress();
+                if ( address instanceof Inet6Address && ((Inet6Address)address).isLinkLocalAddress()) {
+                    /* We need to work-around a java6 bug */
+                    InetSocketAddress addr = new InetSocketAddress(address, 0);
+                    this.socket.bind(addr);
+                    this.socket.connect(this.socketAddress, this.socketTimeout);
+                } else {
+                    this.socket.connect(this.socketAddress, this.socketTimeout);
+                }
                 this.socket.setSoTimeout(this.socketTimeout);
                 this.localAddress = this.socket.getLocalAddress();
             }

Modified: trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPRequestFactory.java
===================================================================
--- trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPRequestFactory.java	2012-04-04 14:00:15 UTC (rev 783)
+++ trunk/core/src/main/java/org/jboss/modcluster/mcmp/impl/DefaultMCMPRequestFactory.java	2012-04-04 14:01:42 UTC (rev 784)
@@ -21,6 +21,8 @@
  */
 package org.jboss.modcluster.mcmp.impl;
 
+import java.net.Inet6Address;
+
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
@@ -69,8 +71,21 @@
         // so send host name portion, if it exists
         String address = connector.getAddress().toString();
         int index = address.indexOf("/");
+        if (connector.getAddress() instanceof Inet6Address) {
+            /* IPv6 address require a [] */
+            String saddr = null;
+            if (index > 0) {
+                saddr = address.substring(0, index); // Name.
+            } else {
+                saddr = "[";
+                saddr = saddr.concat(address.substring(1));
+                saddr = saddr.concat("]");
+            }
+            parameters.put("Host", saddr);
+        } else {
+            parameters.put("Host", (index > 0) ? address.substring(0, index) : address.substring(1));
+        }
 
-        parameters.put("Host", (index > 0) ? address.substring(0, index) : address.substring(1));
         parameters.put("Port", String.valueOf(connector.getPort()));
         parameters.put("Type", connector.getType().toString());
 



More information about the mod_cluster-commits mailing list