if(vid == null && msg.getDest() != null && !msg.getDest().isMulticastAddress()) break;
if(vid == null || (msg.getDest() != null && !msg.getDest().isMulticastAddress())) break;
    public void down(Event evt) {        Message msg;        if(log.isTraceEnabled())            log.trace("queued_msgs has " + queued_msgs.size() + " messages " +                    "\n\nnaker:\n" + naker.dumpContents() + "\n\nout_of_bander: " +                    out_of_bander.dumpContents() + "\n-----------------------------\n");        switch(evt.getType()) {            case Event.MSG:                msg=(Message)evt.getArg();                if(vid == null && msg.getDest() != null && !msg.getDest().isMulticastAddress())                    break; // unicast address: not null and not mcast, pass down unchanged                if(send_next_msg_out_of_band) {                    out_of_bander.send(msg);                    send_next_msg_out_of_band=false;                }                else if(send_next_msg_acking) {                    naker.setAcks(true);  // require acks when sending a msg                    naker.send(msg);                    naker.setAcks(false);  // don't require acks when sending a msg                    send_next_msg_acking=false;                }                else                    naker.send(msg);                return;    // don't pass down the stack, naker does this for us !            case Event.GET_MSG_DIGEST:                long[] highest_seqnos=(long[])evt.getArg();                Digest digest=naker.computeMessageDigest(highest_seqnos);                passUp(new Event(Event.GET_MSG_DIGEST_OK, digest));                return;            case Event.GET_MSGS:                List lower_seqnos=naker.getMessagesInRange((long[][])evt.getArg());                passUp(new Event(Event.GET_MSGS_OK, lower_seqnos));                return;            case Event.REBROADCAST_MSGS:                rebroadcastMsgs((Vector)evt.getArg());                break;            case Event.TMP_VIEW:                Vector mbrs=((View)evt.getArg()).getMembers();                members=mbrs != null? (Vector)mbrs.clone() : new Vector(11);                break;            case Event.VIEW_CHANGE:                synchronized(this) {                    view=((View)((View)evt.getArg()).clone());                    vid=view.getVid();                    members=(Vector)view.getMembers().clone();                    naker.reset();                    out_of_bander.reset();                    is_server=true;  // check vids from now on                    // deliver messages received previously for this view                    if(queued_msgs.size() > 0)                        deliverQueuedMessages();                }                break;            case Event.BECOME_SERVER:                is_server=true;                break;            case Event.SWITCH_NAK:                naker.setAcks(false); // don't require acks when sending a msg                return;                     // don't pass down any further            case Event.SWITCH_NAK_ACK:                send_next_msg_acking=true;                return;                     // don't pass down any further            case Event.SWITCH_OUT_OF_BAND:                send_next_msg_out_of_band=true;                return;            case Event.GET_MSGS_RECEIVED:  // return the highest seqnos delivered (=consumed by the application)                long[] h=naker.getHighestSeqnosDelivered();                passUp(new Event(Event.GET_MSGS_RECEIVED_OK, h));                break;        }        passDown(evt);    }