public void processNack ( ControlNack nackMsg ) throws SIResourceException { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . entry ( tc , "processNack" , nackMsg ) ; // Short circuit if incoming message has wrong stream ID if ( ! hasStream ( nackMsg . getGuaranteedStreamUUID ( ) ) ) { // Bogus stream, ignore the message if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "processNack" , "unknown stream ID - message ignored" ) ; return ; } int priority = nackMsg . getPriority ( ) . intValue ( ) ; Reliability reliability = nackMsg . getReliability ( ) ; // There is no stream for BestEffort non persistent messages if ( reliability . compareTo ( Reliability . BEST_EFFORT_NONPERSISTENT ) > 0 ) { StreamSet streamSet = getStreamSet ( ) ; // Get the outputStream to send the necessary messages SourceStream sourceStream = ( SourceStream ) streamSet . getStream ( priority , reliability ) ; // If there's no source stream then priority was bogus so ignore the nack if ( sourceStream == null ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "processNack" , "unknown priority - message ignored" ) ; return ; } sourceStream . processNack ( nackMsg ) ; } else { // We didn't expect a Nack for this stream so throw it away but write an entry // to the trace log indicating that it happened if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "Unexpected Nack message for BEST_EFFORT_NONPERSISTENT message " ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "processNack" ) ; }
Process a Nack control message . This should cause the source stream to resend the original message .