if(!local_addr.equals(original_sender)) {
amISender=local_addr.equals(original_sender); if(!amISender)
    void handleXmitReq(Address xmit_requester, long first_seqno, long last_seqno, Address original_sender) {        Message m, tmp;        LinkedList list;        long size=0, marker=first_seqno, len;        NakReceiverWindow win=null;        if(log.isTraceEnabled()) {            StringBuffer sb=new StringBuffer();            sb.append(local_addr).append(": received xmit request from ").append(xmit_requester).append(" for ");            sb.append(original_sender).append(" [").append(first_seqno).append(" - ").append(last_seqno).append("]");            log.trace(sb.toString());        }        if(first_seqno > last_seqno) {            if(log.isErrorEnabled())                log.error("first_seqno (" + first_seqno + ") > last_seqno (" + last_seqno + "): not able to retransmit");            return;        }        if(!local_addr.equals(original_sender)) {            // retransmit from received messages table            win=(NakReceiverWindow)received_msgs.get(original_sender);        }        else {            // retransmit from sent messages table        }        list=new LinkedList();        for(long i=first_seqno; i <= last_seqno; i++) {            if(win != null)                m=win.get(i);            else                m=(Message)sent_msgs.get(new Long(i)); // no need to synchronize            if(m == null) {                if(log.isErrorEnabled()) {                    StringBuffer sb=new StringBuffer();                    sb.append("(requester=").append(xmit_requester).append(", local_addr=").append(this.local_addr);                    sb.append(") message ").append(original_sender).append("::").append(i);                    sb.append(" not found in ").append((win == null? "sent" : "received")).append(" msgs. ");                    if(win != null) {                        sb.append("Received messages: ").append(win.toString());                    }                    else {                        sb.append("Sent messages: ").append(printSentMsgs());                    }                    log.error(sb.toString());                }                continue;            }            len=m.size();            size+=len;            if(size > max_xmit_size && list.size() > 0) { // changed from >= to > (yaron-r, bug #943709)                // yaronr: added &&listSize()>0 since protocols between FRAG and NAKACK add headers, and message exceeds size.                // size has reached max_xmit_size. go ahead and send message (excluding the current message)                if(log.isTraceEnabled())                    log.trace("xmitting msgs [" + marker + '-' + (i - 1) + "] to " + xmit_requester);                sendXmitRsp(xmit_requester, (LinkedList)list.clone(), marker, i - 1);                marker=i;                list.clear();                // fixed Dec 15 2003 (bela, patch from Joel Dice (dicej)), see explanantion under                // bug report #854887                size=len;            }            if(Global.copy) {                tmp=m.copy();            }            else {                tmp=m;            }            tmp.setDest(xmit_requester);            tmp.setSrc(local_addr);            list.add(tmp);        }        if(list.size() > 0) {            if(log.isTraceEnabled())                log.trace("xmitting msgs [" + marker + '-' + last_seqno + "] to " + xmit_requester);            sendXmitRsp(xmit_requester, (LinkedList)list.clone(), marker, last_seqno);            list.clear();        }    }