code: 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");
    }
docs: Process a Nack control message. This should cause the source stream to resend
  the original message.
  
  @param nackMsg The Nack control message