case Event.TMP_VIEW: Vector mbrs=((View)evt.getArg()).getMembers(); members=mbrs != null ? (Vector)mbrs.clone(): new Vector(); break;
case Event.REBROADCAST_MSGS: rebroadcastMsgs((Vector)evt.getArg()); break;
    public void down(Event evt) {	Message msg;	if(Trace.debug)	    Trace.debug("NAKACK.down()", "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(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();	    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);    }