docs: void handleNewStateEvent(NewStateEvent event)
      {
          AsteriskChannelImpl channel = getChannelImplById(event.getUniqueId());
  
          if (channel == null)
          {
              // NewStateEvent can occur for an existing channel that now has a
              // different unique id (originate with Local/)
              channel = getChannelImplByNameAndActive(event.getChannel());
              idChanged(channel, event);
  
              if (channel == null)
              {
                  logger.info("Creating new channel due to NewStateEvent '" + event.getChannel() + "' unique id "
                          + event.getUniqueId());
                  // NewStateEvent can occur instead of a NewChannelEvent
                  channel = addNewChannel(event.getUniqueId(), event.getChannel(), event.getDateReceived(),
                          event.getCallerIdNum(), event.getCallerIdName(), ChannelState.valueOf(event.getChannelState()),
                          null /* account code not available */);
              }
          }
  
          // NewStateEvent can provide a new CallerIdNum or CallerIdName not
          // previously received through a
          // NewCallerIdEvent. This happens at least on outgoing legs from the
          // queue application to agents.
          if (event.getCallerIdNum() != null || event.getCallerIdName() != null)
          {
              String cidnum = "";
              String cidname = "";
              CallerId currentCallerId = channel.getCallerId();
  
              if (currentCallerId != null)
              {
                  cidnum = currentCallerId.getNumber();
                  cidname = currentCallerId.getName();
              }
  
              if (event.getCallerIdNum() != null)
              {
                  cidnum = event.getCallerIdNum();
              }
  
              if (event.getCallerIdName() != null)
              {
                  cidname = event.getCallerIdName();
              }
  
              CallerId newCallerId = new CallerId(cidname, cidnum);
              logger.debug("Updating CallerId (following NewStateEvent) to: " + newCallerId.toString());
              channel.setCallerId(newCallerId);
  
              // Also, NewStateEvent can return a new channel name for the same
              // channel uniqueid, indicating the channel has been
              // renamed but no related RenameEvent has been received.
              // This happens with mISDN channels (see AJ-153)
              if (event.getChannel() != null && !event.getChannel().equals(channel.getName()))
              {
                  logger.info("Renaming channel (following NewStateEvent) '" + channel.getName() + "' to '"
                          + event.getChannel() + "'");
                  synchronized (channel)
                  {
                      channel.nameChanged(event.getDateReceived(), event.getChannel());
                  }
              }
          }
  
          if (event.getChannelState() != null)
          {
              synchronized (channel)
              {
                  channel.stateChanged(event.getDateReceived(), ChannelState.valueOf(event.getChannelState()));
              }
          }
      }