org.jgroups.protocols.SNIFF Maven / Gradle / Ivy
package org.jgroups.protocols;
import org.jgroups.Message;
import org.jgroups.annotations.MBean;
import org.jgroups.annotations.Property;
import org.jgroups.stack.Protocol;
import org.jgroups.util.MessageBatch;
/**
* Protocol trying to print message payloads as strings
* @author Bela Ban
* @since 4.0
*/
@MBean(description="Protocol trying to print payloads as strings")
public class SNIFF extends Protocol {
@Property(description="Print received messages")
protected boolean up=true;
@Property(description="Print sent messages")
protected boolean down;
public Object down(Message msg) {
if(down)
dump("down msg", msg);
return down_prot.down(msg);
}
public Object up(Message msg) {
if(up)
dump("up msg", msg);
return up_prot.up(msg);
}
public void up(MessageBatch batch) {
int count=1;
for(Message msg: batch)
dump("batch msg#" + count++, msg);
up_prot.up(batch);
}
protected static void dump(String type, Message msg) {
StringBuilder sb=new StringBuilder();
sb.append(String.format("\n%s from %s (%d bytes):\nhdrs: %s\n", type, msg.src(), msg.getLength(), msg.printHeaders()));
if(msg.getLength() > 0) {
sb.append("payload: ");
printPayload(msg, sb);
sb.append("\n");
}
System.out.println(sb.toString());
}
protected static String printPayload(Message msg, final StringBuilder sb) {
byte[] payload=msg.getRawBuffer();
int print_max=Math.min(msg.getLength(), 50);
for(int i=msg.getOffset(); i < print_max; i++) {
byte ch=payload[i];
sb.append((char)ch);
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy