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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to