protected AbstractMessage handleInterested(final InterestedMessage incomingMessage) {

    if (logger.isDebugEnabled()) logger.debug("processing message:" + incomingMessage.toString());

    Subscriber subscriber;
    if (null
        != (subscriber =
            this.videoSignaling
                .getUploadSlotManager()
                .getGrantedUploadSlotRequest(
                    incomingMessage.getSender(), incomingMessage.getSegmentIdentifier()))) {
      logger.warn(subscriber + " is already granted!!");
      return this.videoSignaling.getGranted(
          incomingMessage.getSegmentIdentifier(),
          subscriber.getTimeToTimeoutMillis(),
          UploadSlot.INACTIVITY_TIMEOUT_S * 1000,
          incomingMessage.getSender(),
          false);
    }

    int timeoutMillis =
        this.videoSignaling
            .getUploadSlotManager()
            .setInterestedGetTimeout(
                incomingMessage.getSender(),
                incomingMessage.getSegmentIdentifier(),
                !incomingMessage.isNot());

    if (incomingMessage.isNot()) {
      // if not interested, should return subscribed
      return this.videoSignaling.getSubscribed(
          incomingMessage.getSegmentIdentifier(),
          null,
          timeoutMillis,
          incomingMessage.getSender(),
          false);
    } else {
      // must return Queued with new (extended) timeout.. and synchronize with the possible Granted
      return this.videoSignaling.getQueued(
          incomingMessage.getSegmentIdentifier(),
          timeoutMillis,
          incomingMessage.getSender(),
          false);
    }
  }