You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/07/07 17:38:15 UTC

svn commit: r419910 - in /tomcat/container/tc5.5.x/modules/groupcom: ./ src/share/org/apache/catalina/tribes/membership/ test/java/org/apache/catalina/tribes/test/transport/

Author: fhanik
Date: Fri Jul  7 08:38:14 2006
New Revision: 419910

URL: http://svn.apache.org/viewvc?rev=419910&view=rev
Log:
Larger package for multicast
Throw an error if package is too large

Modified:
    tomcat/container/tc5.5.x/modules/groupcom/VERSION
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/MemberImpl.java
    tomcat/container/tc5.5.x/modules/groupcom/test/java/org/apache/catalina/tribes/test/transport/SocketTribesReceive.java

Modified: tomcat/container/tc5.5.x/modules/groupcom/VERSION
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/VERSION?rev=419910&r1=419909&r2=419910&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/VERSION (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/VERSION Fri Jul  7 08:38:14 2006
@@ -1,3 +1,6 @@
+0.9.4.9
+  - max multicast packet is no roughly 64k instead of 8k
+  - tribes throws an illegal argument exception if the payload added is too large  
 0.9.4.8
   - fix bug in the NIO sender, it should use flip instead of rewind
 0.9.4.7

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java?rev=419910&r1=419909&r2=419910&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/McastServiceImpl.java Fri Jul  7 08:38:14 2006
@@ -44,6 +44,8 @@
 {
     private static org.apache.commons.logging.Log log =
         org.apache.commons.logging.LogFactory.getLog( McastService.class );
+    
+    protected static int MAX_PACKET_SIZE = 65535;
     /**
      * Internal flag used for the listen thread that listens to the multicasting socket.
      */
@@ -149,10 +151,10 @@
         this.service = service;
         this.sendFrequency = sendFrequency;
         setupSocket();
-        sendPacket = new DatagramPacket(new byte[8192],8192);
+        sendPacket = new DatagramPacket(new byte[MAX_PACKET_SIZE],MAX_PACKET_SIZE);
         sendPacket.setAddress(address);
         sendPacket.setPort(port);
-        receivePacket = new DatagramPacket(new byte[8192],8192);
+        receivePacket = new DatagramPacket(new byte[MAX_PACKET_SIZE],MAX_PACKET_SIZE);
         receivePacket.setAddress(address);
         receivePacket.setPort(port);
         membership = new Membership(member);
@@ -272,11 +274,13 @@
     public void receive() throws IOException {
         try {
             socket.receive(receivePacket);
-            byte[] data = new byte[receivePacket.getLength()];
-            System.arraycopy(receivePacket.getData(), receivePacket.getOffset(), data, 0, data.length);
-            final MemberImpl m = MemberImpl.getMember(data);
-            if (log.isDebugEnabled())
-                log.debug("Mcast receive ping from member " + m);
+            if(receivePacket.getLength() > MAX_PACKET_SIZE) {
+                log.error("Multicast packet received was too long, dropping package:"+receivePacket.getLength());
+            } else {
+                byte[] data = new byte[receivePacket.getLength()];
+                System.arraycopy(receivePacket.getData(), receivePacket.getOffset(), data, 0, data.length);
+                final MemberImpl m = MemberImpl.getMember(data);
+                if (log.isTraceEnabled()) log.trace("Mcast receive ping from member " + m);
                 Thread t = null;
                 if (Arrays.equals(m.getCommand(), Member.SHUTDOWN_PAYLOAD)) {
                     if (log.isDebugEnabled()) log.debug("Member has shutdown:" + m);
@@ -294,7 +298,8 @@
                         }
                     };
                 } //end if
-            if ( t != null ) t.start();
+                if ( t != null ) t.start();
+            }
         } catch (SocketTimeoutException x ) { 
             //do nothing, this is normal, we don't want to block forever
             //since the receive thread is the same thread

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/MemberImpl.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/MemberImpl.java?rev=419910&r1=419909&r2=419910&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/MemberImpl.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/membership/MemberImpl.java Fri Jul  7 08:38:14 2006
@@ -244,6 +244,10 @@
      * @return a member object.
      */
     public static MemberImpl getMember(byte[] data, MemberImpl member) {
+        return getMember(data,0,data.length,member);
+    }
+
+    public static MemberImpl getMember(byte[] data, int offset, int length, MemberImpl member) {
        //package looks like
        //alive - 8 bytes
        //port - 4 bytes
@@ -256,7 +260,7 @@
        //uniqueId - 16 bytes
        //payload length - 4bytes
        //payload - pl bytes
-       int pos = 0;
+       int pos = offset;
 
        byte[] alived = new byte[8];
        System.arraycopy(data, pos, alived, 0, 8);
@@ -303,8 +307,8 @@
        member.domain = domain;
        member.command = command;
        
-       member.dataPkg = new byte[data.length];
-       System.arraycopy(data,0,member.dataPkg,0,data.length);
+       member.dataPkg = new byte[length];
+       System.arraycopy(data,offset,member.dataPkg,0,length);
        
        return member;
     }
@@ -468,8 +472,13 @@
     }
 
     public void setPayload(byte[] payload) {
+        byte[] oldpayload = this.payload;
         this.payload = payload!=null?payload:new byte[0];
-        getData(true,true);
+        if ( this.getData(true,true).length > McastServiceImpl.MAX_PACKET_SIZE ) {
+            this.payload = oldpayload;
+            throw new IllegalArgumentException("Payload is to large for tribes to handle.");
+        }
+        
     }
 
     public void setCommand(byte[] command) {

Modified: tomcat/container/tc5.5.x/modules/groupcom/test/java/org/apache/catalina/tribes/test/transport/SocketTribesReceive.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/test/java/org/apache/catalina/tribes/test/transport/SocketTribesReceive.java?rev=419910&r1=419909&r2=419910&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/test/java/org/apache/catalina/tribes/test/transport/SocketTribesReceive.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/test/java/org/apache/catalina/tribes/test/transport/SocketTribesReceive.java Fri Jul  7 08:38:14 2006
@@ -15,8 +15,8 @@
     static boolean first = true;
     static int count = 0;
     static DecimalFormat df = new DecimalFormat("##.00");
-    static BigDecimal total = new BigDecimal(0);
-    static BigDecimal bytes = new BigDecimal(32871);
+    static BigDecimal total = new BigDecimal((double)0);
+    static BigDecimal bytes = new BigDecimal((double)32871);
 
     
     public static void main(String[] args) throws Exception {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org