public Object up(Message msg) { Frag3Header hdr=msg.getHeader(this.id); if(hdr != null) { // needs to be defragmented Message assembled_msg=unfragment(msg, hdr); if(assembled_msg != null) { assembled_msg.setSrc(msg.getSrc()); // needed ? YES, because fragments have a null src !! up_prot.up(assembled_msg); avg_size_up.add(assembled_msg.length()); } return null; } return up_prot.up(msg); }
public Object up(Message msg) { if(msg.getDest() == null || msg.isFlagSet(Message.Flag.NO_RELIABILITY)) // only handle unicast messages return up_prot.up(msg); // pass up UnicastHeader3 hdr=msg.getHeader(this.id); if(hdr == null) return up_prot.up(msg); Address sender=msg.getSrc(); switch(hdr.type) { case UnicastHeader3.DATA: // received regular message if(is_trace) log.trace("%s <-- DATA(%s: #%d, conn_id=%d%s)", local_addr, sender, hdr.seqno, hdr.conn_id, hdr.first? ", first" : ""); if(Objects.equals(local_addr, sender)) handleDataReceivedFromSelf(sender, hdr.seqno, msg); else handleDataReceived(sender, hdr.seqno, hdr.conn_id, hdr.first, msg); break; // we pass the deliverable message up in handleDataReceived() default: handleUpEvent(sender, msg, hdr); break; } return null; }
/** * If there is no header, we pass the message up. Otherwise we uncompress the payload to its original size. */ public Object up(Message msg) { CompressHeader hdr=msg.getHeader(this.id); if(hdr != null) { Message uncompressed_msg=uncompress(msg, hdr.original_size); if(uncompressed_msg != null) { if(log.isTraceEnabled()) log.trace("uncompressed %d bytes to %d bytes", msg.getLength(), uncompressed_msg.getLength()); return up_prot.up(uncompressed_msg); } } return up_prot.up(msg); }
public void receive(long id, Message msg) { Address sender=msg.getSrc(); if(sender == null) { if(log.isErrorEnabled()) log.error(local_addr + ": sender is null, cannot deliver message " + "::" + id); return; } if(!canDeliver(sender, id)) { if(log.isWarnEnabled()) log.warn(local_addr + ": dropped duplicate message " + sender + "::" + id); return; } if(log.isTraceEnabled()) log.trace(local_addr + ": delivering " + sender + "::" + id); up_prot.up(msg); }
public Object up(Message msg) { FragHeader hdr=msg.getHeader(this.id); if(hdr != null) { // needs to be defragmented Message assembled_msg=unfragment(msg, hdr); if(assembled_msg != null) { assembled_msg.setSrc(msg.getSrc()); // needed ? YES, because fragments have a null src !! up_prot.up(assembled_msg); avg_size_up.add(assembled_msg.length()); } return null; } return up_prot.up(msg); }
public Object up(Message msg) { if(!(msg.isFlagSet(Message.Flag.RSVP) || msg.isFlagSet(Message.Flag.RSVP_NB))) return up_prot.up(msg); RsvpHeader hdr=msg.getHeader(id); if(hdr == null) { if(dest == null || handle_unicasts) log.error(Util.getMessage("MessageWithRSVPFlagNeedsToHaveAnRsvpHeader")); return up_prot.up(msg); Address sender=msg.getSrc(); if(log.isTraceEnabled()) log.trace(local_addr + ": " + hdr.typeToString() + " <-- " + sender); switch(hdr.type) { case RsvpHeader.REQ: if(this.ack_on_delivery) { try { return up_prot.up(msg); return up_prot.up(msg); handleResponse(msg.getSrc(), hdr.id); return null; return up_prot.up(msg);
public Object down(Message msg) { if(msg.getDest() != null) return down_prot.down(msg); // only process multicast messages if(next == null) // view hasn'<></> been received yet, use the normal transport return down_prot.down(msg); // we need to copy the message, as we cannot do a msg.setSrc(next): the next retransmission // would use 'next' as destination ! Message copy=msg.copy(true); short hdr_ttl=(short)(loopback? view_size -1 : view_size); DaisyHeader hdr=new DaisyHeader(hdr_ttl); copy.setDest(next); copy.putHeader(getId(), hdr); msgs_sent++; if(loopback) { if(log.isTraceEnabled()) log.trace(new StringBuilder("looping back message ").append(msg)); if(msg.getSrc() == null) msg.setSrc(local_addr); default_pool.execute(() -> up_prot.up(msg)); } return down_prot.down(copy); }
protected void deliverMessage(final Message msg, final Address sender, final long seqno) { if(is_trace) log.trace("%s: delivering %s#%s", local_addr, sender, seqno); try { up_prot.up(msg); } catch(Throwable t) { log.warn(Util.getMessage("FailedToDeliverMsg"), local_addr, msg.isFlagSet(Message.Flag.OOB) ? "OOB message" : "message", msg, t); } }
public Object up(Message msg) { if(bypass(msg, true)) return up_prot.up(msg); GMS.GmsHeader hdr=msg.getHeader(GMS_ID); if(hdr == null) return super.up(msg); if(skip(hdr)) return up_prot.up(msg); if(isJoinOrInstallViewMessage(hdr)) { Address key_server=msg.getSrc(); sendKeyRequest(key_server); } return super.up(msg); }
public Object up(Message msg) { DaisyHeader hdr=msg.getHeader(getId()); if(hdr == null) return up_prot.up(msg); // 1. forward the message to the next in line if ttl > 0 short ttl=hdr.getTTL(); if(log.isTraceEnabled()) log.trace(local_addr + ": received message from " + msg.getSrc() + " with ttl=" + ttl); if(--ttl > 0) { Message copy=msg.copy(true); copy.setDest(next); copy.putHeader(getId(), new DaisyHeader(ttl)); msgs_forwarded++; if(log.isTraceEnabled()) log.trace(local_addr + ": forwarding message to " + next + " with ttl=" + ttl); down_prot.down(copy); } // 2. Pass up msg.setDest(null); return up_prot.up(msg); }