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]