docs: @Override
      public List<IQ> dispatchIncomingPacket(IQ iq, String id) throws XMPPException, NotConnectedException, InterruptedException {
          List<IQ> responses = new ArrayList<>();
          IQ response = null;
  
          if (iq.getType().equals(IQ.Type.error)) {
              // Process errors
              setNegotiatorState(JingleNegotiatorState.FAILED);
              triggerMediaClosed(getBestCommonAudioPt());
              // This next line seems wrong, and may subvert the normal closing process.
              throw new JingleException(iq.getError().getDescriptiveText());
          } else if (iq.getType().equals(IQ.Type.result)) {
              // Process ACKs
              if (isExpectedId(iq.getStanzaId())) {
                  receiveResult(iq);
                  removeExpectedId(iq.getStanzaId());
              }
          } else if (iq instanceof Jingle) {
              Jingle jingle = (Jingle) iq;
              JingleActionEnum action = jingle.getAction();
  
              // Only act on the JingleContent sections that belong to this media negotiator.
              for (JingleContent jingleContent : jingle.getContentsList()) {
                  if (jingleContent.getName().equals(parentNegotiator.getName())) {
  
                      JingleDescription description = jingleContent.getDescription();
  
                      if (description != null) {
  
                          switch (action) {
                              case CONTENT_ACCEPT:
                                  response = receiveContentAcceptAction(jingle, description);
                                  break;
  
                              case CONTENT_MODIFY:
                                  break;
  
                              case CONTENT_REMOVE:
                                  break;
  
                              case SESSION_INFO:
                                  response = receiveSessionInfoAction(jingle, description);
                                  break;
  
                              case SESSION_INITIATE:
                                  response = receiveSessionInitiateAction(jingle, description);
                                  break;
  
                              case SESSION_ACCEPT:
                                  response = receiveSessionAcceptAction(jingle, description);
                                  break;
  
                              default:
                                  break;
                          }
                      }
                  }
              }
  
          }
  
          if (response != null) {
              addExpectedId(response.getStanzaId());
              responses.add(response);
          }
  
          return responses;
      }