docs: @Override
      public void handleControlMessage(SIBUuid8 sourceMEUuid, ControlMessage cMsg)
                      throws
                      SIIncorrectCallException,
                      SIErrorException,
                      SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "handleControlMessage", new Object[] { cMsg });
  
          // Note that this method is called by the PubSubOutputHandler
          // and not by the RemoteMessageReceiver for Ack, Nack, RequestFlush
          // and AreYouFlushed messages
  
          // Work out type of ControlMessage and process it
          ControlMessageType type = cMsg.getControlMessageType();
  
          //  IMPORTANT: do the flush related messages first so that we answer 
          // consistently with respect to any in progress flush.
          if (type == ControlMessageType.REQUESTFLUSH)
          {
              // TODO: this should invoke some higher-level interface indicating that
              // our target wants to be flushed.      
          }
  
          // Now we can process the rest of the control messages...
  
          // Someone downstream has completed an ack prefix
          // or can't handle a nack.
          else if (type == ControlMessageType.ACK)
          {
              processAck((ControlAck) cMsg);
          }
          else if (type == ControlMessageType.NACK)
          {
              processNack((ControlNack) cMsg);
          }
          else if (type == ControlMessageType.ACKEXPECTED)
          {
              processAckExpected((ControlAckExpected) cMsg);
          }
          else
          {
              //call the super class to handle downstream (target) control messages
              super.handleControlMessage(sourceMEUuid, cMsg);
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "handleControlMessage");
      }